]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
bcachefs: BTREE_INSERT_ATOMIC must be used for extents now
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 18 Mar 2019 20:18:39 +0000 (16:18 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:18 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_update_leaf.c

index 5349790547f4c26b775d8e58f93b6135892ea1f1..d940fdf0147838df389ef6c6aad933687f5cb103 100644 (file)
@@ -406,9 +406,10 @@ bch2_deferred_update_alloc(struct bch_fs *c,
 
 /* Normal update interface: */
 
-static inline void btree_insert_entry_checks(struct bch_fs *c,
+static inline void btree_insert_entry_checks(struct btree_trans *trans,
                                             struct btree_insert_entry *i)
 {
+       struct bch_fs *c = trans->c;
        enum btree_id btree_id = !i->deferred
                ? i->iter->btree_id
                : i->d->btree_id;
@@ -419,6 +420,9 @@ static inline void btree_insert_entry_checks(struct bch_fs *c,
                EBUG_ON((i->iter->flags & BTREE_ITER_IS_EXTENTS) &&
                        !bch2_extent_is_atomic(i->k, i->iter));
 
+               EBUG_ON((i->iter->flags & BTREE_ITER_IS_EXTENTS) &&
+                       !(trans->flags & BTREE_INSERT_ATOMIC));
+
                bch2_btree_iter_verify_locks(i->iter);
        }
 
@@ -840,7 +844,7 @@ int bch2_trans_commit(struct btree_trans *trans,
        bubble_sort(trans->updates, trans->nr_updates, btree_trans_cmp);
 
        trans_for_each_update(trans, i)
-               btree_insert_entry_checks(c, i);
+               btree_insert_entry_checks(trans, i);
 
        if (unlikely(!(trans->flags & BTREE_INSERT_NOCHECK_RW) &&
                     !percpu_ref_tryget(&c->writes)))
@@ -954,7 +958,10 @@ int bch2_btree_delete_range(struct bch_fs *c, enum btree_id id,
                bch2_trans_update(&trans, BTREE_INSERT_ENTRY(iter, &delete));
 
                ret = bch2_trans_commit(&trans, NULL, journal_seq,
+                                       BTREE_INSERT_ATOMIC|
                                        BTREE_INSERT_NOFAIL);
+               if (ret == -EINTR)
+                       ret = 0;
                if (ret)
                        break;