Signed-off-by: Kent Overstreet <[email protected]>
---
fs/bcachefs/data_update.c | 3 ++-
fs/bcachefs/inode.c | 2 +-
fs/bcachefs/io_misc.c | 4 ++--
fs/bcachefs/io_write.c | 11 +++++++----
fs/bcachefs/io_write.h | 2 +-
fs/bcachefs/opts.c | 2 +-
fs/bcachefs/opts.h | 2 +-
fs/bcachefs/rebalance.c | 4 ++--
fs/bcachefs/rebalance.h | 2 +-
fs/bcachefs/reflink.c | 2 +-
10 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/fs/bcachefs/data_update.c b/fs/bcachefs/data_update.c
index 43d318ff488e..b62d890003ec 100644
--- a/fs/bcachefs/data_update.c
+++ b/fs/bcachefs/data_update.c
@@ -438,7 +438,8 @@ 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(c, &opts, insert,
+ m->op.opts.change_cookie)
?:
bch2_trans_update(trans, &iter, insert,
BTREE_UPDATE_internal_snapshot_node);
if (ret)
diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c
index d1ec33edcc0b..c222fb8a7d07 100644
--- a/fs/bcachefs/inode.c
+++ b/fs/bcachefs/inode.c
@@ -1239,7 +1239,7 @@ void bch2_inode_opts_get_inode(struct bch_fs *c,
BCH_INODE_OPTS()
#undef x
- ret->opt_change_cookie = atomic_read(&c->opt_change_cookie);
+ ret->change_cookie = atomic_read(&c->opt_change_cookie);
bch2_io_opts_fixups(ret);
}
diff --git a/fs/bcachefs/io_misc.c b/fs/bcachefs/io_misc.c
index 6d204b980f76..04eb5ecd102b 100644
--- a/fs/bcachefs/io_misc.c
+++ b/fs/bcachefs/io_misc.c
@@ -109,7 +109,7 @@ int bch2_extent_fallocate(struct btree_trans *trans,
}
ret = bch2_extent_update(trans, inum, iter, new.k, &disk_res,
- 0, i_sectors_delta, true);
+ 0, i_sectors_delta, true, 0);
err:
if (!ret && sectors_allocated)
bch2_increment_clock(c, sectors_allocated, WRITE);
@@ -211,7 +211,7 @@ int bch2_fpunch_at(struct btree_trans *trans, struct
btree_iter *iter,
bch2_cut_back(end_pos, &delete);
ret = bch2_extent_update(trans, inum, iter, &delete,
- &disk_res, 0, i_sectors_delta, false);
+ &disk_res, 0, i_sectors_delta, false, 0);
bch2_disk_reservation_put(c, &disk_res);
}
diff --git a/fs/bcachefs/io_write.c b/fs/bcachefs/io_write.c
index a0cb5d2dd0f8..0122d8b3292a 100644
--- a/fs/bcachefs/io_write.c
+++ b/fs/bcachefs/io_write.c
@@ -310,7 +310,8 @@ int bch2_extent_update(struct btree_trans *trans,
struct disk_reservation *disk_res,
u64 new_i_size,
s64 *i_sectors_delta_total,
- bool check_enospc)
+ bool check_enospc,
+ u32 change_cookie)
{
struct bch_fs *c = trans->c;
struct bpos next_pos;
@@ -364,7 +365,8 @@ 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(c, &opts, k,
+ change_cookie)) ?:
bch2_trans_update(trans, iter, k, 0) ?:
bch2_trans_commit(trans, disk_res, NULL,
BCH_TRANS_COMMIT_no_check_rw|
@@ -415,7 +417,8 @@ static int bch2_write_index_default(struct bch_write_op *op)
ret = bch2_extent_update(trans, inum, &iter, sk.k,
&op->res,
op->new_i_size, &op->i_sectors_delta,
- op->flags & BCH_WRITE_check_enospc);
+ op->flags & BCH_WRITE_check_enospc,
+ op->opts.change_cookie);
if (bch2_err_matches(ret, BCH_ERR_transaction_restart))
continue;
@@ -1267,7 +1270,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(c, &opts, new,
op->opts.change_cookie)) ?:
bch2_trans_update(trans, iter, new,
BTREE_UPDATE_internal_snapshot_node);
}
diff --git a/fs/bcachefs/io_write.h b/fs/bcachefs/io_write.h
index 6c05ba6e15d6..692529bf401d 100644
--- a/fs/bcachefs/io_write.h
+++ b/fs/bcachefs/io_write.h
@@ -28,7 +28,7 @@ int bch2_sum_sector_overwrites(struct btree_trans *, struct
btree_iter *,
struct bkey_i *, bool *, s64 *, s64 *);
int bch2_extent_update(struct btree_trans *, subvol_inum,
struct btree_iter *, struct bkey_i *,
- struct disk_reservation *, u64, s64 *, bool);
+ struct disk_reservation *, u64, s64 *, bool, u32);
static inline void bch2_write_op_init(struct bch_write_op *op, struct bch_fs
*c,
struct bch_inode_opts opts)
diff --git a/fs/bcachefs/opts.c b/fs/bcachefs/opts.c
index 16d210cbc849..9f5684ec056a 100644
--- a/fs/bcachefs/opts.c
+++ b/fs/bcachefs/opts.c
@@ -812,7 +812,7 @@ void bch2_inode_opts_get(struct bch_fs *c, struct
bch_inode_opts *ret)
BCH_INODE_OPTS()
#undef x
- ret->opt_change_cookie = atomic_read(&c->opt_change_cookie);
+ ret->change_cookie = atomic_read(&c->opt_change_cookie);
bch2_io_opts_fixups(ret);
}
diff --git a/fs/bcachefs/opts.h b/fs/bcachefs/opts.h
index 2425ba247201..f0f3483c1aab 100644
--- a/fs/bcachefs/opts.h
+++ b/fs/bcachefs/opts.h
@@ -679,7 +679,7 @@ struct bch_inode_opts {
BCH_INODE_OPTS()
#undef x
- u32 opt_change_cookie;
+ u32 change_cookie;
};
static inline void bch2_io_opts_fixups(struct bch_inode_opts *opts)
diff --git a/fs/bcachefs/rebalance.c b/fs/bcachefs/rebalance.c
index 9590c57798c6..d8e214e6f671 100644
--- a/fs/bcachefs/rebalance.c
+++ b/fs/bcachefs/rebalance.c
@@ -162,7 +162,7 @@ static bool bch2_bkey_rebalance_needs_update(struct bch_fs
*c, struct bch_inode_
}
int bch2_bkey_set_needs_rebalance(struct bch_fs *c, struct bch_inode_opts
*opts,
- struct bkey_i *_k)
+ struct bkey_i *_k, u32 change_cookie)
{
if (!bkey_extent_is_direct_data(&_k->k))
return 0;
@@ -218,7 +218,7 @@ int bch2_get_update_rebalance_opts(struct btree_trans
*trans,
/* On successfull transaction commit, @k was invalidated: */
- return bch2_bkey_set_needs_rebalance(trans->c, io_opts, n) ?:
+ return bch2_bkey_set_needs_rebalance(trans->c, io_opts, n, 0) ?:
bch2_trans_update(trans, iter, n,
BTREE_UPDATE_internal_snapshot_node) ?:
bch2_trans_commit(trans, NULL, NULL, 0) ?:
bch_err_throw(trans->c, transaction_restart_nested);
diff --git a/fs/bcachefs/rebalance.h b/fs/bcachefs/rebalance.h
index 9f2839ddb60e..62b7f0b3aec7 100644
--- a/fs/bcachefs/rebalance.h
+++ b/fs/bcachefs/rebalance.h
@@ -27,7 +27,7 @@ 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);
-int bch2_bkey_set_needs_rebalance(struct bch_fs *, struct bch_inode_opts *,
struct bkey_i *);
+int bch2_bkey_set_needs_rebalance(struct bch_fs *, struct bch_inode_opts *,
struct bkey_i *, u32);
int bch2_get_update_rebalance_opts(struct btree_trans *,
struct bch_inode_opts *,
struct btree_iter *,
diff --git a/fs/bcachefs/reflink.c b/fs/bcachefs/reflink.c
index 5e62eddf30ba..d54468fdcb18 100644
--- a/fs/bcachefs/reflink.c
+++ b/fs/bcachefs/reflink.c
@@ -707,7 +707,7 @@ s64 bch2_remap_range(struct bch_fs *c,
ret = bch2_extent_update(trans, dst_inum, &dst_iter,
new_dst.k, &disk_res,
new_i_size, i_sectors_delta,
- true);
+ true, 0);
bch2_disk_reservation_put(c, &disk_res);
}
bch2_trans_iter_exit(&dst_iter);
--
2.50.1