summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/bcachefs/extents.c13
-rw-r--r--fs/bcachefs/extents.h13
-rw-r--r--fs/bcachefs/fs-io.c2
-rw-r--r--fs/bcachefs/fs.c2
-rw-r--r--fs/bcachefs/io.c14
-rw-r--r--fs/bcachefs/io.h13
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,