bcachefs: BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 6 Jul 2021 02:16:02 +0000 (22:16 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:08 +0000 (17:09 -0400)
Add a new flag to control assertions about updating to internal snapshot
nodes, that normally should not be written to - to be used in an
upcoming patch.

Also do some renaming - trigger_flags is now update_flags.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_key_cache.c
fs/bcachefs/btree_types.h
fs/bcachefs/btree_update.h
fs/bcachefs/btree_update_leaf.c

index 221cb0f46db068473098fe54b3ba1b5676617718..bafa1f0abc885aace97aeeb837647528798ee94f 100644 (file)
@@ -398,7 +398,9 @@ retry:
         * to be using alloc reserves:
         * */
        ret   = bch2_btree_iter_traverse(b_iter) ?:
-               bch2_trans_update(trans, b_iter, ck->k, BTREE_TRIGGER_NORUN) ?:
+               bch2_trans_update(trans, b_iter, ck->k,
+                                 BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|
+                                 BTREE_TRIGGER_NORUN) ?:
                bch2_trans_commit(trans, NULL, NULL,
                                  BTREE_INSERT_NOUNLOCK|
                                  BTREE_INSERT_NOCHECK_RW|
index 3e7edaffbb9deb9719cbff72306b32540546c9bb..134d221d150e128dac6a496af8208dfe4c02d3f4 100644 (file)
@@ -340,7 +340,7 @@ struct bkey_cached {
 };
 
 struct btree_insert_entry {
-       unsigned                trigger_flags;
+       unsigned                flags;
        u8                      bkey_type;
        enum btree_id           btree_id:8;
        u8                      level;
@@ -639,7 +639,9 @@ static inline bool btree_type_has_snapshots(enum btree_id id)
        return (1 << id) & BTREE_ID_HAS_SNAPSHOTS;
 }
 
-enum btree_trigger_flags {
+enum btree_update_flags {
+       __BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE,
+
        __BTREE_TRIGGER_NORUN,          /* Don't run triggers at all */
 
        __BTREE_TRIGGER_INSERT,
@@ -650,6 +652,8 @@ enum btree_trigger_flags {
        __BTREE_TRIGGER_NOATOMIC,
 };
 
+#define BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE (1U << __BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE)
+
 #define BTREE_TRIGGER_NORUN            (1U << __BTREE_TRIGGER_NORUN)
 
 #define BTREE_TRIGGER_INSERT           (1U << __BTREE_TRIGGER_INSERT)
index cbfc8544def490df821d986c8dbd9c669c5adf78..1c085a28b832d4240323dd0d89ff67b208416f8f 100644 (file)
@@ -77,7 +77,7 @@ int bch2_btree_node_update_key(struct bch_fs *, struct btree_iter *,
                               struct btree *, struct bkey_i *);
 
 int bch2_trans_update(struct btree_trans *, struct btree_iter *,
-                     struct bkey_i *, enum btree_trigger_flags);
+                     struct bkey_i *, enum btree_update_flags);
 void bch2_trans_commit_hook(struct btree_trans *,
                            struct btree_trans_commit_hook *);
 int __bch2_trans_commit(struct btree_trans *);
index 81c111176b1f54101b5e0a1538dd54b067d8455c..984e060f6732642688b71e261388f190e63821e5 100644 (file)
@@ -363,7 +363,7 @@ static noinline void bch2_trans_mark_gc(struct btree_trans *trans)
 
                if (gc_visited(c, gc_pos_btree_node(i->iter->l[0].b)))
                        bch2_mark_update(trans, i->iter, i->k,
-                                        i->trigger_flags|BTREE_TRIGGER_GC);
+                                        i->flags|BTREE_TRIGGER_GC);
        }
 }
 
@@ -468,7 +468,7 @@ bch2_trans_commit_write_locked(struct btree_trans *trans,
        trans_for_each_update(trans, i)
                if (BTREE_NODE_TYPE_HAS_MEM_TRIGGERS & (1U << i->bkey_type))
                        bch2_mark_update(trans, i->iter, i->k,
-                                        i->trigger_flags);
+                                        i->flags);
 
        if (marking && trans->fs_usage_deltas)
                bch2_trans_fs_usage_apply(trans, trans->fs_usage_deltas);
@@ -791,8 +791,7 @@ static noinline int extent_front_merge(struct btree_trans *trans,
                struct btree_iter *update_iter =
                        bch2_trans_copy_iter(trans, iter);
 
-               ret = bch2_btree_delete_at(trans, update_iter,
-                                          i->trigger_flags);
+               ret = bch2_btree_delete_at(trans, update_iter, i->flags);
                bch2_trans_iter_put(trans, update_iter);
 
                if (ret)
@@ -859,14 +858,16 @@ static int extent_handle_overwrites(struct btree_trans *trans,
                        if (ret)
                                goto out;
 
-                       bch2_trans_update(trans, update_iter, update, i->trigger_flags);
+                       bch2_trans_update(trans, update_iter, update,
+                                         BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|
+                                         i->flags);
                        bch2_trans_iter_put(trans, update_iter);
                }
 
                if (bkey_cmp(k.k->p, i->k->k.p) <= 0) {
                        update_iter = bch2_trans_copy_iter(trans, iter);
                        ret = bch2_btree_delete_at(trans, update_iter,
-                                                  i->trigger_flags);
+                                                  i->flags);
                        bch2_trans_iter_put(trans, update_iter);
 
                        if (ret)
@@ -881,7 +882,7 @@ static int extent_handle_overwrites(struct btree_trans *trans,
                        bkey_reassemble(update, k);
                        bch2_cut_front(i->k->k.p, update);
 
-                       bch2_trans_update(trans, iter, update, i->trigger_flags);
+                       bch2_trans_update(trans, iter, update, i->flags);
                        goto out;
                }
 next:
@@ -927,7 +928,7 @@ int __bch2_trans_commit(struct btree_trans *trans)
 #ifdef CONFIG_BCACHEFS_DEBUG
        trans_for_each_update(trans, i)
                if (btree_iter_type(i->iter) != BTREE_ITER_CACHED &&
-                   !(i->trigger_flags & BTREE_TRIGGER_NORUN))
+                   !(i->flags & BTREE_TRIGGER_NORUN))
                        bch2_btree_key_cache_verify_clean(trans,
                                        i->btree_id, i->k->k.p);
 #endif
@@ -945,8 +946,8 @@ int __bch2_trans_commit(struct btree_trans *trans)
                                i->trans_triggers_run = true;
                                trans_trigger_run = true;
 
-                               ret = bch2_trans_mark_update(trans, i->iter, i->k,
-                                                            i->trigger_flags);
+                               ret = bch2_trans_mark_update(trans, i->iter,
+                                                            i->k, i->flags);
                                if (unlikely(ret)) {
                                        if (ret == -EINTR)
                                                trace_trans_restart_mark(trans->ip, _RET_IP_,
@@ -1029,10 +1030,10 @@ err:
 }
 
 int bch2_trans_update(struct btree_trans *trans, struct btree_iter *iter,
-                     struct bkey_i *k, enum btree_trigger_flags flags)
+                     struct bkey_i *k, enum btree_update_flags flags)
 {
        struct btree_insert_entry *i, n = (struct btree_insert_entry) {
-               .trigger_flags  = flags,
+               .flags          = flags,
                .bkey_type      = __btree_node_type(iter->level, iter->btree_id),
                .btree_id       = iter->btree_id,
                .level          = iter->level,
@@ -1130,7 +1131,7 @@ int bch2_btree_insert(struct bch_fs *c, enum btree_id id,
 }
 
 int bch2_btree_delete_at(struct btree_trans *trans,
-                        struct btree_iter *iter, unsigned trigger_flags)
+                        struct btree_iter *iter, unsigned update_flags)
 {
        struct bkey_i *k;
 
@@ -1140,7 +1141,7 @@ int bch2_btree_delete_at(struct btree_trans *trans,
 
        bkey_init(&k->k);
        k->k.p = iter->pos;
-       return  bch2_trans_update(trans, iter, k, trigger_flags);
+       return bch2_trans_update(trans, iter, k, update_flags);
 }
 
 int bch2_btree_delete_range_trans(struct btree_trans *trans, enum btree_id id,