bcachefs: Unlink not-touched iters on successful transaction commit
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 28 Mar 2019 04:32:38 +0000 (00:32 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:19 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c
fs/bcachefs/btree_update_leaf.c

index c8122be210295b6076b7d1e40ac7c940046d6c93..ad7858d77a58d8286e008a59a7ee54348b8032da 100644 (file)
@@ -1892,6 +1892,7 @@ int bch2_trans_unlock(struct btree_trans *trans)
 inline void bch2_trans_unlink_iters(struct btree_trans *trans, u64 iters)
 {
        iters &= trans->iters_linked;
+       iters &= ~trans->iters_live;
 
        while (iters) {
                unsigned idx = __ffs64(iters);
@@ -1919,9 +1920,10 @@ void __bch2_trans_begin(struct btree_trans *trans)
        iters_to_unlink |= trans->iters_unlink_on_restart;
        iters_to_unlink |= trans->iters_unlink_on_commit;
 
+       trans->iters_live               = 0;
+
        bch2_trans_unlink_iters(trans, iters_to_unlink);
 
-       trans->iters_live               = 0;
        trans->iters_touched            = 0;
        trans->iters_unlink_on_restart  = 0;
        trans->iters_unlink_on_commit   = 0;
index a8ac68b94e25ed69638662456bb1cdd5d453153b..d345f5a14fde4732abd8272f978899c22b9a50fb 100644 (file)
@@ -856,6 +856,10 @@ out_noupdates:
        BUG_ON(!(trans->flags & BTREE_INSERT_ATOMIC) && ret == -EINTR);
 
        bch2_trans_unlink_iters(trans, trans->iters_unlink_on_commit);
+       if (!ret) {
+               bch2_trans_unlink_iters(trans, ~trans->iters_touched);
+               trans->iters_touched = 0;
+       }
        trans->nr_updates = 0;
 
        return ret;