To be used for caching the existence of scan cookies.

Signed-off-by: Kent Overstreet <[email protected]>
---
 fs/bcachefs/data_update.c |  2 +-
 fs/bcachefs/io_write.c    |  4 ++--
 fs/bcachefs/rebalance.c   |  7 +++++--
 fs/bcachefs/rebalance.h   | 21 +++++++++++----------
 4 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/fs/bcachefs/data_update.c b/fs/bcachefs/data_update.c
index e932ee5488da..0f968bab7d93 100644
--- a/fs/bcachefs/data_update.c
+++ b/fs/bcachefs/data_update.c
@@ -438,7 +438,7 @@ static int __bch2_data_update_index_update(struct 
btree_trans *trans,
                        bch2_insert_snapshot_whiteouts(trans, m->btree_id,
                                                k.k->p, insert->k.p) ?:
                        bch2_inum_snapshot_opts_get(trans, k.k->p.inode, 
k.k->p.snapshot, &opts) ?:
-                       bch2_bkey_set_needs_rebalance(c, &opts, insert,
+                       bch2_bkey_set_needs_rebalance(trans, NULL, &opts, 
insert,
                                                      
SET_NEEDS_REBALANCE_foreground,
                                                      m->op.opts.change_cookie) 
?:
                        bch2_trans_update(trans, &iter, insert,
diff --git a/fs/bcachefs/io_write.c b/fs/bcachefs/io_write.c
index 16bcdada8cf1..cf1dd8bc7fe9 100644
--- a/fs/bcachefs/io_write.c
+++ b/fs/bcachefs/io_write.c
@@ -365,7 +365,7 @@ int bch2_extent_update(struct btree_trans *trans,
                                                  min(k->k.p.offset << 9, 
new_i_size),
                                                  i_sectors_delta, &inode) ?:
                (bch2_inode_opts_get_inode(c, &inode, &opts),
-                bch2_bkey_set_needs_rebalance(c, &opts, k,
+                bch2_bkey_set_needs_rebalance(trans, NULL, &opts, k,
                                               SET_NEEDS_REBALANCE_foreground,
                                               change_cookie)) ?:
                bch2_trans_update(trans, iter, k, 0) ?:
@@ -1271,7 +1271,7 @@ static int bch2_nocow_write_convert_one_unwritten(struct 
btree_trans *trans,
        return  bch2_extent_update_i_size_sectors(trans, iter,
                                        min(new->k.p.offset << 9, new_i_size), 
0, &inode) ?:
                (bch2_inode_opts_get_inode(c, &inode, &opts),
-                bch2_bkey_set_needs_rebalance(c, &opts, new,
+                bch2_bkey_set_needs_rebalance(trans, NULL, &opts, new,
                                               SET_NEEDS_REBALANCE_foreground,
                                               op->opts.change_cookie)) ?:
                bch2_trans_update(trans, iter, new,
diff --git a/fs/bcachefs/rebalance.c b/fs/bcachefs/rebalance.c
index 70000d9a1ec4..33bddbd33088 100644
--- a/fs/bcachefs/rebalance.c
+++ b/fs/bcachefs/rebalance.c
@@ -153,7 +153,9 @@ static inline bool bkey_should_have_rb_opts(struct bch_fs 
*c,
        return k.k->type == KEY_TYPE_reflink_v || 
bch2_bkey_ptrs_need_rebalance(c, opts, k);
 }
 
-int bch2_bkey_set_needs_rebalance(struct bch_fs *c, struct bch_inode_opts 
*opts,
+int bch2_bkey_set_needs_rebalance(struct btree_trans *trans,
+                                 struct per_snapshot_io_opts *snapshot_io_opts,
+                                 struct bch_inode_opts *opts,
                                  struct bkey_i *_k,
                                  enum set_needs_rebalance_ctx ctx,
                                  u32 change_cookie)
@@ -161,6 +163,7 @@ int bch2_bkey_set_needs_rebalance(struct bch_fs *c, struct 
bch_inode_opts *opts,
        if (!bkey_extent_is_direct_data(&_k->k))
                return 0;
 
+       struct bch_fs *c = trans->c;
        struct bkey_s k = bkey_i_to_s(_k);
        struct bch_extent_rebalance *old =
                (struct bch_extent_rebalance *) bch2_bkey_rebalance_opts(k.s_c);
@@ -286,7 +289,7 @@ static int bch2_get_update_rebalance_opts(struct 
btree_trans *trans,
 
        /* On successfull transaction commit, @k was invalidated: */
 
-       ret = bch2_bkey_set_needs_rebalance(c, io_opts, n, ctx, 0) ?:
+       ret = bch2_bkey_set_needs_rebalance(trans, NULL, io_opts, n, ctx, 0) ?:
                bch2_trans_update(trans, iter, n, 
BTREE_UPDATE_internal_snapshot_node) ?:
                bch2_trans_commit(trans, NULL, NULL, 0) ?:
                bch_err_throw(c, transaction_restart_commit);
diff --git a/fs/bcachefs/rebalance.h b/fs/bcachefs/rebalance.h
index fd33e7aa2ecb..fd873894c8b6 100644
--- a/fs/bcachefs/rebalance.h
+++ b/fs/bcachefs/rebalance.h
@@ -28,16 +28,6 @@ static inline struct bch_extent_rebalance 
io_opts_to_rebalance_opts(struct bch_f
 
 u64 bch2_bkey_sectors_need_rebalance(struct bch_fs *, struct bkey_s_c);
 
-enum set_needs_rebalance_ctx {
-       SET_NEEDS_REBALANCE_opt_change,
-       SET_NEEDS_REBALANCE_opt_change_indirect,
-       SET_NEEDS_REBALANCE_foreground,
-       SET_NEEDS_REBALANCE_other,
-};
-
-int bch2_bkey_set_needs_rebalance(struct bch_fs *, struct bch_inode_opts *,
-                                 struct bkey_i *, enum 
set_needs_rebalance_ctx, u32);
-
 /* Inodes in different snapshots may have different IO options: */
 struct snapshot_io_opts_entry {
        u32                     snapshot;
@@ -61,6 +51,17 @@ static inline void per_snapshot_io_opts_exit(struct 
per_snapshot_io_opts *io_opt
        darray_exit(&io_opts->d);
 }
 
+enum set_needs_rebalance_ctx {
+       SET_NEEDS_REBALANCE_opt_change,
+       SET_NEEDS_REBALANCE_opt_change_indirect,
+       SET_NEEDS_REBALANCE_foreground,
+       SET_NEEDS_REBALANCE_other,
+};
+
+int bch2_bkey_set_needs_rebalance(struct btree_trans *,
+                                 struct per_snapshot_io_opts *, struct 
bch_inode_opts *,
+                                 struct bkey_i *, enum 
set_needs_rebalance_ctx, u32);
+
 struct bch_inode_opts *bch2_extent_get_apply_io_opts(struct btree_trans *,
                          struct per_snapshot_io_opts *, struct bpos,
                          struct btree_iter *, struct bkey_s_c,
-- 
2.50.1


Reply via email to