summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2020-03-18 13:40:28 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2020-03-18 14:17:37 -0400
commit5696e6621c3e6cdf3b10f558f7c578a030c7d459 (patch)
tree00f3f1b11143f2656a537a9a5054a4ada52e5302
parent3592e42edfaed6a66470fb6a456a5895243ef2f4 (diff)
bcachefs: Fix an iterator bug
We were incorrectly not restarting the transaction when re-traversing iterators. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/btree_iter.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index 2819b9a487f2..6ed688cdcfde 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -1068,7 +1068,14 @@ retry_all:
goto retry_all;
}
- ret = hweight64(trans->iters_live) > 1 ? -EINTR : 0;
+ if (hweight64(trans->iters_live) > 1)
+ ret = -EINTR;
+ else
+ trans_for_each_iter(trans, iter)
+ if (iter->flags & BTREE_ITER_KEEP_UNTIL_COMMIT) {
+ ret = -EINTR;
+ break;
+ }
out:
bch2_btree_cache_cannibalize_unlock(c);
return ret;