bcachefs: Convert bucket invalidation to key marking path
[linux-block.git] / fs / bcachefs / btree_update.h
index d1647f6eb476022ea3a20e931716415179121c47..1fd01fb404821d5c93d2840a623ec98e85b62174 100644 (file)
@@ -16,6 +16,11 @@ bool bch2_btree_bset_insert_key(struct btree_iter *, struct btree *,
 void bch2_btree_journal_key(struct btree_insert *trans, struct btree_iter *,
                            struct bkey_i *);
 
+void bch2_deferred_update_free(struct bch_fs *,
+                              struct deferred_update *);
+struct deferred_update *
+bch2_deferred_update_alloc(struct bch_fs *, enum btree_id, unsigned);
+
 /* Normal update interface: */
 
 struct btree_insert {
@@ -38,6 +43,13 @@ int __bch2_btree_insert_at(struct btree_insert *);
                .k              = (_k),                                 \
        })
 
+#define BTREE_INSERT_DEFERRED(_d, _k)                                  \
+       ((struct btree_insert_entry) {                                  \
+               .k              = (_k),                                 \
+               .d              = (_d),                                 \
+               .deferred       = true,                                 \
+       })
+
 /**
  * bch_btree_insert_at - insert one or more keys at iterator positions
  * @iter:              btree iterator
@@ -66,9 +78,11 @@ enum {
        __BTREE_INSERT_ATOMIC,
        __BTREE_INSERT_NOUNLOCK,
        __BTREE_INSERT_NOFAIL,
+       __BTREE_INSERT_NOCHECK_RW,
        __BTREE_INSERT_USE_RESERVE,
        __BTREE_INSERT_USE_ALLOC_RESERVE,
        __BTREE_INSERT_JOURNAL_REPLAY,
+       __BTREE_INSERT_NOMARK,
        __BTREE_INSERT_NOWAIT,
        __BTREE_INSERT_GC_LOCK_HELD,
        __BCH_HASH_SET_MUST_CREATE,
@@ -89,16 +103,18 @@ enum {
 /* Don't check for -ENOSPC: */
 #define BTREE_INSERT_NOFAIL            (1 << __BTREE_INSERT_NOFAIL)
 
+#define BTREE_INSERT_NOCHECK_RW                (1 << __BTREE_INSERT_NOCHECK_RW)
+
 /* for copygc, or when merging btree nodes */
 #define BTREE_INSERT_USE_RESERVE       (1 << __BTREE_INSERT_USE_RESERVE)
 #define BTREE_INSERT_USE_ALLOC_RESERVE (1 << __BTREE_INSERT_USE_ALLOC_RESERVE)
 
-/*
- * Insert is for journal replay: don't get journal reservations, or mark extents
- * (bch_mark_key)
- */
+/* Insert is for journal replay - don't get journal reservations: */
 #define BTREE_INSERT_JOURNAL_REPLAY    (1 << __BTREE_INSERT_JOURNAL_REPLAY)
 
+/* Don't call bch2_mark_key: */
+#define BTREE_INSERT_NOMARK            (1 << __BTREE_INSERT_NOMARK)
+
 /* Don't block on allocation failure (for new btree nodes: */
 #define BTREE_INSERT_NOWAIT            (1 << __BTREE_INSERT_NOWAIT)
 #define BTREE_INSERT_GC_LOCK_HELD      (1 << __BTREE_INSERT_GC_LOCK_HELD)