]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Assert that iterators aren't being double freed
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 20 Mar 2021 00:40:31 +0000 (20:40 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:56 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c
fs/bcachefs/buckets.c

index 00140ae50cb93e807892b062929a1fb1578072c4..6e860d47da4fdf9793923709034e7437fb7d4fa5 100644 (file)
@@ -1956,6 +1956,7 @@ int bch2_trans_iter_put(struct btree_trans *trans,
                return 0;
 
        BUG_ON(trans->iters + iter->idx != iter);
+       BUG_ON(!btree_iter_live(trans, iter));
 
        ret = btree_iter_err(iter);
 
index 7bf2fded816ff80e23c95725727774da90d4f2e5..df839021fd3d2eda7ff83b47e23de24abff14b6b 100644 (file)
@@ -1500,6 +1500,10 @@ static struct btree_iter *trans_get_update(struct btree_trans *trans,
                       bkey_cmp(pos, i->k->k.p) < 0
                     : !bkey_cmp(pos, i->iter->pos))) {
                        *k = bkey_i_to_s_c(i->k);
+
+                       /* ugly hack.. */
+                       BUG_ON(btree_iter_live(trans, i->iter));
+                       trans->iters_live |= 1ULL << i->iter->idx;
                        return i->iter;
                }