From 17047fbced563cf5abe5aa546f6a92af48900b69 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Fri, 5 Aug 2022 17:08:35 -0400 Subject: [PATCH] bcachefs: Fix incorrectly freeing btree_path in alloc path Clearing path->preserve means the path will be dropping in bch2_trans_begin() - but on transaction restart, we're likely to need that path again. This fixes a livelock in the allocation path. Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_iter.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index 9a3287da9a120..5ca92b6bb3977 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -335,7 +335,8 @@ void bch2_trans_copy_iter(struct btree_iter *, struct btree_iter *); static inline void set_btree_iter_dontneed(struct btree_iter *iter) { - iter->path->preserve = false; + if (!iter->trans->restarted) + iter->path->preserve = false; } void *bch2_trans_kmalloc(struct btree_trans *, size_t); -- 2.30.2