From: Kent Overstreet Date: Tue, 19 Jul 2022 18:51:52 +0000 (-0400) Subject: bcachefs: Prevent a btree iter overflow in alloc path X-Git-Tag: v6.7-rc1~201^2~868 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=90cecb921cfe95858a32995019f11c20b6339607;p=thirdparty%2Fkernel%2Flinux.git bcachefs: Prevent a btree iter overflow in alloc path In bch2_bucket_alloc_trans(), we're iterating over buckets - but not directly with an iterator, since we're iterating over the freespace btree. This means that we need to clear iter->path->preserve, otherwise we'll end up retaining a btree_path for every alloc key we touched - which is not what we want here. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/alloc_foreground.c b/fs/bcachefs/alloc_foreground.c index 39e3bb5205ca1..a9f893361c73e 100644 --- a/fs/bcachefs/alloc_foreground.c +++ b/fs/bcachefs/alloc_foreground.c @@ -351,6 +351,7 @@ static struct open_bucket *try_alloc_bucket(struct btree_trans *trans, struct bc if (!ob) iter.path->preserve = false; err: + set_btree_iter_dontneed(&iter); bch2_trans_iter_exit(trans, &iter); printbuf_exit(&buf); return ob;