From 0abb250125bfb114fa1f471bc5c77f1dc72b9e4d Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 4 Jan 2020 16:46:23 -0500 Subject: [PATCH] bcachefs: Ensure iterators are valid before calling trans_mark_key() Signed-off-by: Kent Overstreet Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_update_leaf.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index 2242b2061ee29..9ad2e3e90d5bb 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -706,6 +706,15 @@ int __bch2_trans_commit(struct btree_trans *trans) trans_trigger_run = false; trans_for_each_update(trans, i) { + /* we know trans->nounlock won't be set here: */ + if (unlikely(!(i->iter->locks_want < 1 + ? __bch2_btree_iter_upgrade(i->iter, 1) + : i->iter->uptodate <= BTREE_ITER_NEED_PEEK))) { + trace_trans_restart_upgrade(trans->ip); + ret = -EINTR; + goto out; + } + if (iter_has_trans_triggers(i->iter) && !i->trans_triggers_run) { i->trans_triggers_run = true; @@ -723,15 +732,6 @@ int __bch2_trans_commit(struct btree_trans *trans) } while (trans_trigger_run); trans_for_each_update(trans, i) { - /* we know trans->nounlock won't be set here: */ - if (unlikely(!(i->iter->locks_want < 1 - ? __bch2_btree_iter_upgrade(i->iter, 1) - : i->iter->uptodate <= BTREE_ITER_NEED_PEEK))) { - trace_trans_restart_upgrade(trans->ip); - ret = -EINTR; - goto out; - } - u64s = jset_u64s(i->k->k.u64s); if (0) trans->journal_preres_u64s += u64s; -- 2.30.2