]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: Ensure iterators are valid before calling trans_mark_key()
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 4 Jan 2020 21:46:23 +0000 (16:46 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:34 +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_update_leaf.c

index 2242b2061ee2904fd17d11cb2a2f14928ae70e7c..9ad2e3e90d5bb5a04b768546d5477a6a4c257781 100644 (file)
@@ -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;