bcachefs: Better inlining in bch2_subvolume_get_snapshot()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 23 Nov 2022 23:22:59 +0000 (18:22 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:46 +0000 (17:09 -0400)
This provides an inlined version of bch2_subvolume_get() and uses it in
bch2_subvolume_get_snapshot(), since this is the version that's used all
over the place and in fast paths (e.g. IO paths).

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/subvolume.c

index 1133783..0e3b6ae 100644 (file)
@@ -795,10 +795,11 @@ void bch2_subvolume_to_text(struct printbuf *out, struct bch_fs *c,
               le32_to_cpu(s.v->snapshot));
 }
 
-int bch2_subvolume_get(struct btree_trans *trans, unsigned subvol,
-                      bool inconsistent_if_not_found,
-                      int iter_flags,
-                      struct bch_subvolume *s)
+static __always_inline int
+bch2_subvolume_get_inlined(struct btree_trans *trans, unsigned subvol,
+                          bool inconsistent_if_not_found,
+                          int iter_flags,
+                          struct bch_subvolume *s)
 {
        struct btree_iter iter;
        struct bkey_s_c k;
@@ -818,6 +819,14 @@ int bch2_subvolume_get(struct btree_trans *trans, unsigned subvol,
        return ret;
 }
 
+int bch2_subvolume_get(struct btree_trans *trans, unsigned subvol,
+                      bool inconsistent_if_not_found,
+                      int iter_flags,
+                      struct bch_subvolume *s)
+{
+       return bch2_subvolume_get_inlined(trans, subvol, inconsistent_if_not_found, iter_flags, s);
+}
+
 int bch2_snapshot_get_subvol(struct btree_trans *trans, u32 snapshot,
                             struct bch_subvolume *subvol)
 {
@@ -833,12 +842,12 @@ int bch2_subvolume_get_snapshot(struct btree_trans *trans, u32 subvol,
        struct bch_subvolume s;
        int ret;
 
-       ret = bch2_subvolume_get(trans, subvol, true,
-                                BTREE_ITER_CACHED|
-                                BTREE_ITER_WITH_UPDATES,
-                                &s);
-
-       *snapid = le32_to_cpu(s.snapshot);
+       ret = bch2_subvolume_get_inlined(trans, subvol, true,
+                                        BTREE_ITER_CACHED|
+                                        BTREE_ITER_WITH_UPDATES,
+                                        &s);
+       if (!ret)
+               *snapid = le32_to_cpu(s.snapshot);
        return ret;
 }