]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/btree_update.h
Update bcachefs sources to 400c2f8d96 bcachefs: Mask out unknown compat features...
[bcachefs-tools-debian] / libbcachefs / btree_update.h
index a251380801692fc232ff2944e7d9d127e6b415e1..12065bba82dd4201e374a063d1d0bcc0aeea1bbd 100644 (file)
@@ -8,8 +8,8 @@
 struct bch_fs;
 struct btree;
 
-void bch2_btree_node_lock_for_insert(struct bch_fs *, struct btree *,
-                                    struct btree_iter *);
+void bch2_btree_node_lock_for_insert(struct btree_trans *, struct btree_iter *,
+                                    struct btree *);
 bool bch2_btree_bset_insert_key(struct btree_iter *, struct btree *,
                                struct btree_node_iter *, struct bkey_i *);
 void bch2_btree_add_journal_pin(struct bch_fs *, struct btree *, u64);
@@ -70,13 +70,16 @@ int bch2_btree_delete_range_trans(struct btree_trans *, enum btree_id,
 int bch2_btree_delete_range(struct bch_fs *, enum btree_id,
                            struct bpos, struct bpos, u64 *);
 
-int bch2_btree_node_rewrite(struct bch_fs *c, struct btree_iter *,
+int bch2_btree_node_rewrite(struct btree_trans *, struct btree_iter *,
                            __le64, unsigned);
-int bch2_btree_node_update_key(struct bch_fs *, struct btree_iter *,
+void bch2_btree_node_rewrite_async(struct bch_fs *, struct btree *);
+int bch2_btree_node_update_key(struct btree_trans *, 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 *);
 
 /**
@@ -101,13 +104,12 @@ static inline int bch2_trans_commit(struct btree_trans *trans,
        return __bch2_trans_commit(trans);
 }
 
-#define __bch2_trans_do(_trans, _disk_res, _journal_seq, _flags, _do)  \
+#define lockrestart_do(_trans, _do)                                    \
 ({                                                                     \
        int _ret;                                                       \
                                                                        \
        while (1) {                                                     \
-               _ret = (_do) ?: bch2_trans_commit(_trans, (_disk_res),  \
-                                       (_journal_seq), (_flags));      \
+               _ret = (_do);                                           \
                if (_ret != -EINTR)                                     \
                        break;                                          \
                bch2_trans_reset(_trans, 0);                            \
@@ -116,6 +118,10 @@ static inline int bch2_trans_commit(struct btree_trans *trans,
        _ret;                                                           \
 })
 
+#define __bch2_trans_do(_trans, _disk_res, _journal_seq, _flags, _do)  \
+       lockrestart_do(_trans, _do ?: bch2_trans_commit(_trans, (_disk_res),\
+                                       (_journal_seq), (_flags)))
+
 #define bch2_trans_do(_c, _disk_res, _journal_seq, _flags, _do)                \
 ({                                                                     \
        struct btree_trans trans;                                       \
@@ -134,9 +140,4 @@ static inline int bch2_trans_commit(struct btree_trans *trans,
             (_i) < (_trans)->updates + (_trans)->nr_updates;           \
             (_i)++)
 
-#define trans_for_each_update2(_trans, _i)                             \
-       for ((_i) = (_trans)->updates2;                                 \
-            (_i) < (_trans)->updates2 + (_trans)->nr_updates2;         \
-            (_i)++)
-
 #endif /* _BCACHEFS_BTREE_UPDATE_H */