diff options
Diffstat (limited to 'fs/bcachefs')
-rw-r--r-- | fs/bcachefs/btree_iter.c | 4 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index c8122be21029..ad7858d77a58 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -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; diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index a8ac68b94e25..d345f5a14fde 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -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; |