Signed-off-by: Kent Overstreet <[email protected]>
---
fs/bcachefs/fs-io-buffered.c | 8 ++++----
fs/bcachefs/fs-io-direct.c | 6 +++---
fs/bcachefs/fs-io.c | 2 +-
fs/bcachefs/inode.c | 17 +++++++++--------
fs/bcachefs/inode.h | 5 ++---
fs/bcachefs/move.c | 14 +++++++++-----
fs/bcachefs/move.h | 2 +-
fs/bcachefs/opts.c | 11 +++++------
fs/bcachefs/opts.h | 2 +-
9 files changed, 35 insertions(+), 32 deletions(-)
diff --git a/fs/bcachefs/fs-io-buffered.c b/fs/bcachefs/fs-io-buffered.c
index 7ba4ef3173c7..a027992d769c 100644
--- a/fs/bcachefs/fs-io-buffered.c
+++ b/fs/bcachefs/fs-io-buffered.c
@@ -284,12 +284,12 @@ void bch2_readahead(struct readahead_control *ractl)
{
struct bch_inode_info *inode = to_bch_ei(ractl->mapping->host);
struct bch_fs *c = inode->v.i_sb->s_fs_info;
- struct bch_inode_opts opts;
struct folio *folio;
struct readpages_iter readpages_iter;
struct blk_plug plug;
- bch2_inode_opts_get(&opts, c, &inode->ei_inode);
+ struct bch_inode_opts opts;
+ bch2_inode_opts_get_inode(c, &inode->ei_inode, &opts);
int ret = readpages_iter_init(&readpages_iter, ractl);
if (ret)
@@ -361,7 +361,7 @@ int bch2_read_single_folio(struct folio *folio, struct
address_space *mapping)
if (!bch2_folio_create(folio, GFP_KERNEL))
return -ENOMEM;
- bch2_inode_opts_get(&opts, c, &inode->ei_inode);
+ bch2_inode_opts_get_inode(c, &inode->ei_inode, &opts);
rbio = rbio_init(bio_alloc_bioset(NULL, 1, REQ_OP_READ, GFP_KERNEL,
&c->bio_read),
c,
@@ -683,7 +683,7 @@ int bch2_writepages(struct address_space *mapping, struct
writeback_control *wbc
struct bch_fs *c = mapping->host->i_sb->s_fs_info;
struct bch_writepage_state *w = kzalloc(sizeof(*w),
GFP_NOFS|__GFP_NOFAIL);
- bch2_inode_opts_get(&w->opts, c, &to_bch_ei(mapping->host)->ei_inode);
+ bch2_inode_opts_get_inode(c, &to_bch_ei(mapping->host)->ei_inode,
&w->opts);
blk_start_plug(&w->plug);
int ret = bch2_write_cache_pages(mapping, wbc, w);
diff --git a/fs/bcachefs/fs-io-direct.c b/fs/bcachefs/fs-io-direct.c
index 2ee6e1720515..a104b9d70bea 100644
--- a/fs/bcachefs/fs-io-direct.c
+++ b/fs/bcachefs/fs-io-direct.c
@@ -68,7 +68,6 @@ static int bch2_direct_IO_read(struct kiocb *req, struct
iov_iter *iter)
struct file *file = req->ki_filp;
struct bch_inode_info *inode = file_bch_inode(file);
struct bch_fs *c = inode->v.i_sb->s_fs_info;
- struct bch_inode_opts opts;
struct dio_read *dio;
struct bio *bio;
struct blk_plug plug;
@@ -78,7 +77,8 @@ static int bch2_direct_IO_read(struct kiocb *req, struct
iov_iter *iter)
size_t shorten;
ssize_t ret;
- bch2_inode_opts_get(&opts, c, &inode->ei_inode);
+ struct bch_inode_opts opts;
+ bch2_inode_opts_get_inode(c, &inode->ei_inode, &opts);
/* bios must be 512 byte aligned: */
if ((offset|iter->count) & (SECTOR_SIZE - 1))
@@ -451,7 +451,7 @@ static __always_inline long bch2_dio_write_loop(struct
dio_write *dio)
bool sync = dio->sync, dropped_locks;
long ret;
- bch2_inode_opts_get(&opts, c, &inode->ei_inode);
+ bch2_inode_opts_get_inode(c, &inode->ei_inode, &opts);
while (1) {
iter_count = dio->iter.count;
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c
index f71909e4ef1d..57e9459afa07 100644
--- a/fs/bcachefs/fs-io.c
+++ b/fs/bcachefs/fs-io.c
@@ -630,7 +630,7 @@ static noinline int __bchfs_fallocate(struct bch_inode_info
*inode, int mode,
struct bch_inode_opts opts;
int ret = 0;
- bch2_inode_opts_get(&opts, c, &inode->ei_inode);
+ bch2_inode_opts_get_inode(c, &inode->ei_inode, &opts);
CLASS(btree_trans, trans)(c);
CLASS(btree_iter, iter)(trans, BTREE_ID_extents,
diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c
index 30dc6631c333..b7fcdb76483c 100644
--- a/fs/bcachefs/inode.c
+++ b/fs/bcachefs/inode.c
@@ -1224,21 +1224,22 @@ struct bch_opts bch2_inode_opts_to_opts(struct
bch_inode_unpacked *inode)
return ret;
}
-void bch2_inode_opts_get(struct bch_inode_opts *opts, struct bch_fs *c,
- struct bch_inode_unpacked *inode)
+void bch2_inode_opts_get_inode(struct bch_fs *c,
+ struct bch_inode_unpacked *inode,
+ struct bch_inode_opts *ret)
{
#define x(_name, _bits)
\
if ((inode)->bi_##_name) { \
- opts->_name = inode->bi_##_name - 1; \
- opts->_name##_from_inode = true; \
+ ret->_name = inode->bi_##_name - 1; \
+ ret->_name##_from_inode = true; \
} else { \
- opts->_name = c->opts._name; \
- opts->_name##_from_inode = false; \
+ ret->_name = c->opts._name; \
+ ret->_name##_from_inode = false; \
}
BCH_INODE_OPTS()
#undef x
- bch2_io_opts_fixups(opts);
+ bch2_io_opts_fixups(ret);
}
int bch2_inum_opts_get(struct btree_trans *trans, subvol_inum inum, struct
bch_inode_opts *opts)
@@ -1249,7 +1250,7 @@ int bch2_inum_opts_get(struct btree_trans *trans,
subvol_inum inum, struct bch_i
if (ret)
return ret;
- bch2_inode_opts_get(opts, trans->c, &inode);
+ bch2_inode_opts_get_inode(trans->c, &inode, opts);
return 0;
}
diff --git a/fs/bcachefs/inode.h b/fs/bcachefs/inode.h
index c26f48fdaa81..12e0a104c196 100644
--- a/fs/bcachefs/inode.h
+++ b/fs/bcachefs/inode.h
@@ -289,8 +289,7 @@ int bch2_inode_nlink_inc(struct bch_inode_unpacked *);
void bch2_inode_nlink_dec(struct btree_trans *, struct bch_inode_unpacked *);
struct bch_opts bch2_inode_opts_to_opts(struct bch_inode_unpacked *);
-void bch2_inode_opts_get(struct bch_inode_opts *, struct bch_fs *,
- struct bch_inode_unpacked *);
+void bch2_inode_opts_get_inode(struct bch_fs *, struct bch_inode_unpacked *,
struct bch_inode_opts *);
int bch2_inum_opts_get(struct btree_trans *, subvol_inum, struct
bch_inode_opts *);
int bch2_inode_set_casefold(struct btree_trans *, subvol_inum,
struct bch_inode_unpacked *, unsigned);
@@ -301,7 +300,7 @@ static inline struct bch_extent_rebalance
bch2_inode_rebalance_opts_get(struct bch_fs *c, struct bch_inode_unpacked
*inode)
{
struct bch_inode_opts io_opts;
- bch2_inode_opts_get(&io_opts, c, inode);
+ bch2_inode_opts_get_inode(c, inode, &io_opts);
return io_opts_to_rebalance_opts(c, &io_opts);
}
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index 39bec75890f4..03b3060f1964 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -481,7 +481,7 @@ struct bch_inode_opts *bch2_move_get_io_opts(struct
btree_trans *trans,
break;
struct snapshot_io_opts_entry e = { .snapshot =
k.k->p.snapshot };
- bch2_inode_opts_get(&e.io_opts, trans->c, &inode);
+ bch2_inode_opts_get_inode(trans->c, &inode, &e.io_opts);
darray_push(&io_opts->d, e);
}));
@@ -512,7 +512,7 @@ int bch2_move_get_io_opts_one(struct btree_trans *trans,
{
struct bch_fs *c = trans->c;
- *io_opts = bch2_opts_to_inode_opts(c->opts);
+ bch2_inode_opts_get(c, io_opts);
/* reflink btree? */
if (extent_k.k->p.inode) {
@@ -527,7 +527,7 @@ int bch2_move_get_io_opts_one(struct btree_trans *trans,
if (!ret && bkey_is_inode(inode_k.k)) {
struct bch_inode_unpacked inode;
bch2_inode_unpack(inode_k, &inode);
- bch2_inode_opts_get(io_opts, c, &inode);
+ bch2_inode_opts_get_inode(c, &inode, io_opts);
}
}
@@ -855,7 +855,6 @@ static int __bch2_move_data_phys(struct moving_context
*ctxt,
struct btree_trans *trans = ctxt->trans;
struct bch_fs *c = trans->c;
bool is_kthread = current->flags & PF_KTHREAD;
- struct bch_inode_opts io_opts = bch2_opts_to_inode_opts(c->opts);
struct btree_iter iter = {};
struct bkey_buf sk;
struct bkey_s_c k;
@@ -863,6 +862,9 @@ static int __bch2_move_data_phys(struct moving_context
*ctxt,
u64 check_mismatch_done = bucket_start;
int ret = 0;
+ struct bch_inode_opts io_opts;
+ bch2_inode_opts_get(c, &io_opts);
+
CLASS(bch2_dev_tryget, ca)(c, dev);
if (!ca)
return 0;
@@ -1085,7 +1087,6 @@ static int bch2_move_btree(struct bch_fs *c,
struct bch_move_stats *stats)
{
bool kthread = (current->flags & PF_KTHREAD) != 0;
- struct bch_inode_opts io_opts = bch2_opts_to_inode_opts(c->opts);
struct moving_context ctxt;
struct btree_trans *trans;
struct btree_iter iter;
@@ -1094,6 +1095,9 @@ static int bch2_move_btree(struct bch_fs *c,
struct data_update_opts data_opts;
int ret = 0;
+ struct bch_inode_opts io_opts;
+ bch2_inode_opts_get(c, &io_opts);
+
bch2_moving_ctxt_init(&ctxt, c, NULL, stats,
writepoint_ptr(&c->btree_write_point),
true);
diff --git a/fs/bcachefs/move.h b/fs/bcachefs/move.h
index a5561e02c38c..18021d2c51d0 100644
--- a/fs/bcachefs/move.h
+++ b/fs/bcachefs/move.h
@@ -102,7 +102,7 @@ struct per_snapshot_io_opts {
static inline void per_snapshot_io_opts_init(struct per_snapshot_io_opts
*io_opts, struct bch_fs *c)
{
memset(io_opts, 0, sizeof(*io_opts));
- io_opts->fs_io_opts = bch2_opts_to_inode_opts(c->opts);
+ bch2_inode_opts_get(c, &io_opts->fs_io_opts);
}
static inline void per_snapshot_io_opts_exit(struct per_snapshot_io_opts
*io_opts)
diff --git a/fs/bcachefs/opts.c b/fs/bcachefs/opts.c
index 6091e6d55a17..10d472d3e7d1 100644
--- a/fs/bcachefs/opts.c
+++ b/fs/bcachefs/opts.c
@@ -802,16 +802,15 @@ bool bch2_opt_set_sb(struct bch_fs *c, struct bch_dev *ca,
/* io opts: */
-struct bch_inode_opts bch2_opts_to_inode_opts(struct bch_opts src)
+void bch2_inode_opts_get(struct bch_fs *c, struct bch_inode_opts *ret)
{
- struct bch_inode_opts opts = {
-#define x(_name, _bits) ._name = src._name,
+ memset(ret, 0, sizeof(*ret));
+
+#define x(_name, _bits) ret->_name = c->opts._name,
BCH_INODE_OPTS()
#undef x
- };
- bch2_io_opts_fixups(&opts);
- return opts;
+ bch2_io_opts_fixups(ret);
}
bool bch2_opt_is_inode_opt(enum bch_opt_id id)
diff --git a/fs/bcachefs/opts.h b/fs/bcachefs/opts.h
index 40a55335998d..9e0c73b7bd3a 100644
--- a/fs/bcachefs/opts.h
+++ b/fs/bcachefs/opts.h
@@ -692,7 +692,7 @@ static inline void bch2_io_opts_fixups(struct
bch_inode_opts *opts)
}
}
-struct bch_inode_opts bch2_opts_to_inode_opts(struct bch_opts);
+void bch2_inode_opts_get(struct bch_fs *, struct bch_inode_opts *);
bool bch2_opt_is_inode_opt(enum bch_opt_id);
#endif /* _BCACHEFS_OPTS_H */
--
2.50.1