]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_update.h
Update bcachefs sources to 5a3a4087af bcachefs: Convert a BUG_ON() to a warning
[bcachefs-tools-debian] / libbcachefs / btree_update.h
index ce5fa6b25cf67a872e97725b58e33b75ce6bb8b6..36e34b3d9213298fba90e02823f67bb4d0d33221 100644 (file)
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 #ifndef _BCACHEFS_BTREE_UPDATE_H
 #define _BCACHEFS_BTREE_UPDATE_H
 
@@ -42,7 +43,11 @@ enum {
        __BTREE_INSERT_USE_ALLOC_RESERVE,
        __BTREE_INSERT_JOURNAL_REPLAY,
        __BTREE_INSERT_JOURNAL_RESERVED,
+       __BTREE_INSERT_NOMARK_OVERWRITES,
        __BTREE_INSERT_NOMARK,
+       __BTREE_INSERT_MARK_INMEM,
+       __BTREE_INSERT_NO_CLEAR_REPLICAS,
+       __BTREE_INSERT_BUCKET_INVALIDATE,
        __BTREE_INSERT_NOWAIT,
        __BTREE_INSERT_GC_LOCK_HELD,
        __BCH_HASH_SET_MUST_CREATE,
@@ -75,9 +80,19 @@ enum {
 
 #define BTREE_INSERT_JOURNAL_RESERVED  (1 << __BTREE_INSERT_JOURNAL_RESERVED)
 
-/* Don't call bch2_mark_key: */
+/* Don't mark overwrites, just new key: */
+#define BTREE_INSERT_NOMARK_OVERWRITES (1 << __BTREE_INSERT_NOMARK_OVERWRITES)
+
+/* Don't call mark new key at all: */
 #define BTREE_INSERT_NOMARK            (1 << __BTREE_INSERT_NOMARK)
 
+/* Don't mark transactionally: */
+#define BTREE_INSERT_MARK_INMEM                (1 << __BTREE_INSERT_MARK_INMEM)
+
+#define BTREE_INSERT_NO_CLEAR_REPLICAS (1 << __BTREE_INSERT_NO_CLEAR_REPLICAS)
+
+#define BTREE_INSERT_BUCKET_INVALIDATE (1 << __BTREE_INSERT_BUCKET_INVALIDATE)
+
 /* 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)
@@ -90,6 +105,8 @@ int bch2_btree_delete_at(struct btree_trans *, struct btree_iter *, unsigned);
 int bch2_btree_insert(struct bch_fs *, enum btree_id, struct bkey_i *,
                     struct disk_reservation *, u64 *, int flags);
 
+int bch2_btree_delete_at_range(struct btree_trans *, struct btree_iter *,
+                              struct bpos, u64 *);
 int bch2_btree_delete_range(struct bch_fs *, enum btree_id,
                            struct bpos, struct bpos, u64 *);
 
@@ -98,25 +115,24 @@ int bch2_btree_node_rewrite(struct bch_fs *c, struct btree_iter *,
 int bch2_btree_node_update_key(struct bch_fs *, struct btree_iter *,
                               struct btree *, struct bkey_i_btree_ptr *);
 
-static inline void
-bch2_trans_update(struct btree_trans *trans,
-                 struct btree_insert_entry entry)
+int bch2_trans_commit(struct btree_trans *,
+                     struct disk_reservation *,
+                     u64 *, unsigned);
+
+static inline void bch2_trans_update(struct btree_trans *trans,
+                                    struct btree_insert_entry entry)
 {
-       BUG_ON(trans->nr_updates >= trans->nr_iters + 4);
+       EBUG_ON(trans->nr_updates >= trans->nr_iters + 4);
 
        trans->updates[trans->nr_updates++] = entry;
 }
 
-int bch2_trans_commit(struct btree_trans *,
-                     struct disk_reservation *,
-                     u64 *, unsigned);
-
 #define bch2_trans_do(_c, _journal_seq, _flags, _do)                   \
 ({                                                                     \
        struct btree_trans trans;                                       \
        int _ret;                                                       \
                                                                        \
-       bch2_trans_init(&trans, (_c));                                  \
+       bch2_trans_init(&trans, (_c), 0, 0);                            \
                                                                        \
        do {                                                            \
                bch2_trans_begin(&trans);                               \
@@ -129,18 +145,6 @@ int bch2_trans_commit(struct btree_trans *,
        _ret;                                                           \
 })
 
-/*
- * We sort transaction entries so that if multiple iterators point to the same
- * leaf node they'll be adjacent:
- */
-static inline bool same_leaf_as_prev(struct btree_trans *trans,
-                                    struct btree_insert_entry *i)
-{
-       return i != trans->updates &&
-               !i->deferred &&
-               i[0].iter->l[0].b == i[-1].iter->l[0].b;
-}
-
 #define __trans_next_update(_trans, _i, _filter)                       \
 ({                                                                     \
        while ((_i) < (_trans)->updates + (_trans->nr_updates) && !(_filter))\
@@ -160,8 +164,4 @@ static inline bool same_leaf_as_prev(struct btree_trans *trans,
 #define trans_for_each_update_iter(trans, i)                           \
        __trans_for_each_update(trans, i, !(i)->deferred)
 
-#define trans_for_each_update_leaf(trans, i)                           \
-       __trans_for_each_update(trans, i, !(i)->deferred &&             \
-                              !same_leaf_as_prev(trans, i))
-
 #endif /* _BCACHEFS_BTREE_UPDATE_H */