bcachefs: Fix btree_path_alloc()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 8 Feb 2023 23:04:22 +0000 (18:04 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:50 +0000 (17:09 -0400)
We need to call bch2_trans_update_max_paths() before marking the new
path as allocated, since we're not initializing it yet.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c

index e5c82aa9bfeb33bb57cb5759e39c1715a89c59c6..3d138ae19469633ad81d727ef2f785c88a73132a 100644 (file)
@@ -1507,6 +1507,14 @@ static inline struct btree_path *btree_path_alloc(struct btree_trans *trans,
                btree_path_overflow(trans);
 
        idx = __ffs64(~trans->paths_allocated);
+
+       /*
+        * Do this before marking the new path as allocated, since it won't be
+        * initialized yet:
+        */
+       if (unlikely(idx > trans->nr_max_paths))
+               bch2_trans_update_max_paths(trans);
+
        trans->paths_allocated |= 1ULL << idx;
 
        path = &trans->paths[idx];
@@ -1517,9 +1525,6 @@ static inline struct btree_path *btree_path_alloc(struct btree_trans *trans,
 
        btree_path_list_add(trans, pos, path);
        trans->paths_sorted = false;
-
-       if (unlikely(idx > trans->nr_max_paths))
-               bch2_trans_update_max_paths(trans);
        return path;
 }