bcachefs: Zero btree_paths on allocation
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 13 Aug 2023 22:15:53 +0000 (18:15 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:10:11 +0000 (17:10 -0400)
This fixes a bug in the cycle detector, bch2_check_for_deadlock() - we
have to make sure the node pointers in the btree paths array are set to
something not-garbage before another thread may see them.

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

index ad95849..d22412d 100644 (file)
@@ -2898,12 +2898,14 @@ static void bch2_trans_alloc_paths(struct btree_trans *trans, struct bch_fs *c)
 #ifdef __KERNEL__
        p = this_cpu_xchg(c->btree_paths_bufs->path, NULL);
 #endif
-       if (!p)
+       if (!p) {
                p = mempool_alloc(&trans->c->btree_paths_pool, GFP_NOFS);
-       /*
-        * paths need to be zeroed, bch2_check_for_deadlock looks at paths in
-        * other threads
-        */
+               /*
+                * paths need to be zeroed, bch2_check_for_deadlock looks at
+                * paths in other threads
+                */
+               memset(p, 0, paths_bytes);
+       }
 
        trans->paths            = p; p += paths_bytes;
        trans->updates          = p; p += updates_bytes;