bcachefs: Inline some fast paths
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 22 Aug 2019 20:07:37 +0000 (16:07 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:25 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/extents.c
fs/bcachefs/extents.h
fs/bcachefs/fs-io.c
fs/bcachefs/fs.c
fs/bcachefs/io.c
fs/bcachefs/io.h

index 61b5e22f66c827c64b81dcf6730cda8ad0c2932c..63afbf24a101831d38bd0d987c518935b30a12db 100644 (file)
@@ -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)
 {
index cef93af258589c4b55d16650650690023848b046..4c4a7945a751c126cb7c34d4324dc919fa4e2df9 100644 (file)
@@ -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(),
index 1873bbb9afda3701d96e4fa605856d5a766c061d..0dfe822cecbf0d7752a4f5d0200966671eb0fafe 100644 (file)
@@ -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;
index c4ef172400e1d33c689a952ef5e53b67b278f276..dcaf1da656d198d8e2586ff1381e63c52f66d26c 100644 (file)
@@ -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;
index 117d1faa99f2e4a56506013cc3f288f4603ffa5a..844ae46cd7ebb86c21a83db6af222520d9f23b48 100644 (file)
@@ -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;
index a768ccc90f1ffea2c0ba09065fac75ba3a833a22..c6f5ae717cf35bc3b0e82da08bb8256922df7bb9 100644 (file)
@@ -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,