]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Prevent a btree iter overflow in alloc path
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 19 Jul 2022 18:51:52 +0000 (14:51 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:36 +0000 (17:09 -0400)
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 <kent.overstreet@gmail.com>
fs/bcachefs/alloc_foreground.c

index 39e3bb5205ca1f3763503a3be94073b69578c768..a9f893361c73e6f7aa5952f679aa02029d43aadd 100644 (file)
@@ -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;