diff options
-rw-r--r-- | fs/bcachefs/extents.c | 13 | ||||
-rw-r--r-- | fs/bcachefs/extents.h | 13 | ||||
-rw-r--r-- | fs/bcachefs/fs-io.c | 2 | ||||
-rw-r--r-- | fs/bcachefs/fs.c | 2 | ||||
-rw-r--r-- | fs/bcachefs/io.c | 14 | ||||
-rw-r--r-- | fs/bcachefs/io.h | 13 |
6 files changed, 30 insertions, 27 deletions
diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c index 61b5e22f66c8..63afbf24a101 100644 --- a/fs/bcachefs/extents.c +++ b/fs/bcachefs/extents.c @@ -806,19 +806,6 @@ bool bch2_cut_back(struct bpos where, struct bkey *k) return true; } -/** - * bch_key_resize - adjust size of @k - * - * bkey_start_offset(k) will be preserved, modifies where the extent ends - */ -void bch2_key_resize(struct bkey *k, - unsigned new_size) -{ - k->p.offset -= k->size; - k->p.offset += new_size; - k->size = new_size; -} - static bool extent_i_save(struct btree *b, struct bkey_packed *dst, struct bkey_i *src) { diff --git a/fs/bcachefs/extents.h b/fs/bcachefs/extents.h index cef93af25858..4c4a7945a751 100644 --- a/fs/bcachefs/extents.h +++ b/fs/bcachefs/extents.h @@ -540,7 +540,18 @@ static inline void bch2_cut_front(struct bpos where, struct bkey_i *k) } bool bch2_cut_back(struct bpos, struct bkey *); -void bch2_key_resize(struct bkey *, unsigned); + +/** + * bch_key_resize - adjust size of @k + * + * bkey_start_offset(k) will be preserved, modifies where the extent ends + */ +static inline void bch2_key_resize(struct bkey *k, unsigned new_size) +{ + k->p.offset -= k->size; + k->p.offset += new_size; + k->size = new_size; +} /* * In extent_sort_fix_overlapping(), insert_fixup_extent(), diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index 1873bbb9afda..0dfe822cecbf 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -1036,7 +1036,7 @@ retry: bkey_start_offset(k.k); sectors = k.k->size - offset_into_extent; - ret = bch2_read_indirect_extent(trans, iter, + ret = bch2_read_indirect_extent(trans, &offset_into_extent, &tmp.k); if (ret) break; diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c index c4ef172400e1..dcaf1da656d1 100644 --- a/fs/bcachefs/fs.c +++ b/fs/bcachefs/fs.c @@ -1233,7 +1233,7 @@ static int bch2_fiemap(struct inode *vinode, struct fiemap_extent_info *info, bkey_start_offset(k.k); sectors = k.k->size - offset_into_extent; - ret = bch2_read_indirect_extent(&trans, iter, + ret = bch2_read_indirect_extent(&trans, &offset_into_extent, &cur.k); if (ret) break; diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index 117d1faa99f2..844ae46cd7eb 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -1305,7 +1305,7 @@ retry: bkey_start_offset(k.k); sectors = k.k->size - offset_into_extent; - ret = bch2_read_indirect_extent(&trans, iter, + ret = bch2_read_indirect_extent(&trans, &offset_into_extent, &tmp.k); if (ret) break; @@ -1594,19 +1594,15 @@ static void bch2_read_endio(struct bio *bio) bch2_rbio_punt(rbio, __bch2_read_endio, context, wq); } -int bch2_read_indirect_extent(struct btree_trans *trans, - struct btree_iter *extent_iter, - unsigned *offset_into_extent, - struct bkey_i *orig_k) +int __bch2_read_indirect_extent(struct btree_trans *trans, + unsigned *offset_into_extent, + struct bkey_i *orig_k) { struct btree_iter *iter; struct bkey_s_c k; u64 reflink_offset; int ret; - if (orig_k->k.type != KEY_TYPE_reflink_p) - return 0; - reflink_offset = le64_to_cpu(bkey_i_to_reflink_p(orig_k)->v.idx) + *offset_into_extent; @@ -1920,7 +1916,7 @@ void bch2_read(struct bch_fs *c, struct bch_read_bio *rbio, u64 inode) bkey_start_offset(k.k); sectors = k.k->size - offset_into_extent; - ret = bch2_read_indirect_extent(&trans, iter, + ret = bch2_read_indirect_extent(&trans, &offset_into_extent, &tmp.k); if (ret) goto err; diff --git a/fs/bcachefs/io.h b/fs/bcachefs/io.h index a768ccc90f1f..c6f5ae717cf3 100644 --- a/fs/bcachefs/io.h +++ b/fs/bcachefs/io.h @@ -99,8 +99,17 @@ struct bch_devs_mask; struct cache_promote_op; struct extent_ptr_decoded; -int bch2_read_indirect_extent(struct btree_trans *, struct btree_iter *, - unsigned *, struct bkey_i *); +int __bch2_read_indirect_extent(struct btree_trans *, unsigned *, + struct bkey_i *); + +static inline int bch2_read_indirect_extent(struct btree_trans *trans, + unsigned *offset_into_extent, + struct bkey_i *k) +{ + return k->k.type == KEY_TYPE_reflink_p + ? __bch2_read_indirect_extent(trans, offset_into_extent, k) + : 0; +} enum bch_read_flags { BCH_READ_RETRY_IF_STALE = 1 << 0, |