bcachefs: Use x-macros for btree node flags
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 26 Feb 2022 16:10:20 +0000 (11:10 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:26 +0000 (17:09 -0400)
This is for adding an array of strings for btree node flag names.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_cache.c
fs/bcachefs/btree_cache.h
fs/bcachefs/btree_io.h
fs/bcachefs/btree_types.h
fs/bcachefs/btree_update_interior.c
fs/bcachefs/btree_update_leaf.c

index a8d5c06541d0338a6581db7d3671df44be22280a..a6b8ca85fc94d150b3aa69654395ee2fbe7fe16f 100644 (file)
 #include <linux/prefetch.h>
 #include <linux/sched/mm.h>
 
+const char * const bch2_btree_node_flags[] = {
+#define x(f)   #f,
+       BTREE_FLAGS()
+#undef x
+       NULL
+};
+
 void bch2_recalc_btree_reserve(struct bch_fs *c)
 {
        unsigned i, reserve = 16;
@@ -413,7 +420,7 @@ void bch2_fs_btree_cache_exit(struct bch_fs *c)
 
                if (btree_node_dirty(b))
                        bch2_btree_complete_write(c, b, btree_current_write(b));
-               clear_btree_node_dirty(c, b);
+               clear_btree_node_dirty_acct(c, b);
 
                btree_node_data_free(c, b);
        }
index a08d12569075dab1b31eae17463254f96a43a4c7..96f8f90e85a1da7ce40a222406e9a113676f0eab 100644 (file)
@@ -5,6 +5,8 @@
 #include "bcachefs.h"
 #include "btree_types.h"
 
+extern const char * const bch2_btree_node_flags[];
+
 struct btree_iter;
 
 void bch2_recalc_btree_reserve(struct bch_fs *);
index 095ad505338d36e1bac1916d5ee9a3f606ed29bc..a1dea8e85e4d54bb9ab0e33d13666e29e5d4e752 100644 (file)
@@ -15,18 +15,13 @@ struct btree;
 struct btree_iter;
 struct btree_node_read_all;
 
-static inline bool btree_node_dirty(struct btree *b)
-{
-       return test_bit(BTREE_NODE_dirty, &b->flags);
-}
-
-static inline void set_btree_node_dirty(struct bch_fs *c, struct btree *b)
+static inline void set_btree_node_dirty_acct(struct bch_fs *c, struct btree *b)
 {
        if (!test_and_set_bit(BTREE_NODE_dirty, &b->flags))
                atomic_inc(&c->btree_cache.dirty);
 }
 
-static inline void clear_btree_node_dirty(struct bch_fs *c, struct btree *b)
+static inline void clear_btree_node_dirty_acct(struct bch_fs *c, struct btree *b)
 {
        if (test_and_clear_bit(BTREE_NODE_dirty, &b->flags))
                atomic_dec(&c->btree_cache.dirty);
index d5c2a776ee1b8f3f22dbcd269236282eed9b9742..165466db222dfa20a8aa7ef485b61819fbec2830 100644 (file)
@@ -429,7 +429,29 @@ struct btree_trans {
        struct replicas_delta_list *fs_usage_deltas;
 };
 
-#define BTREE_FLAG(flag)                                               \
+#define BTREE_FLAGS()                                                  \
+       x(read_in_flight)                                               \
+       x(read_error)                                                   \
+       x(dirty)                                                        \
+       x(need_write)                                                   \
+       x(noevict)                                                      \
+       x(write_idx)                                                    \
+       x(accessed)                                                     \
+       x(write_in_flight)                                              \
+       x(write_in_flight_inner)                                        \
+       x(just_written)                                                 \
+       x(dying)                                                        \
+       x(fake)                                                         \
+       x(need_rewrite)                                                 \
+       x(never_write)
+
+enum btree_flags {
+#define x(flag)        BTREE_NODE_##flag,
+       BTREE_FLAGS()
+#undef x
+};
+
+#define x(flag)                                                                \
 static inline bool btree_node_ ## flag(struct btree *b)                        \
 {      return test_bit(BTREE_NODE_ ## flag, &b->flags); }              \
                                                                        \
@@ -439,36 +461,8 @@ static inline void set_btree_node_ ## flag(struct btree *b)                \
 static inline void clear_btree_node_ ## flag(struct btree *b)          \
 {      clear_bit(BTREE_NODE_ ## flag, &b->flags); }
 
-enum btree_flags {
-       BTREE_NODE_read_in_flight,
-       BTREE_NODE_read_error,
-       BTREE_NODE_dirty,
-       BTREE_NODE_need_write,
-       BTREE_NODE_noevict,
-       BTREE_NODE_write_idx,
-       BTREE_NODE_accessed,
-       BTREE_NODE_write_in_flight,
-       BTREE_NODE_write_in_flight_inner,
-       BTREE_NODE_just_written,
-       BTREE_NODE_dying,
-       BTREE_NODE_fake,
-       BTREE_NODE_need_rewrite,
-       BTREE_NODE_never_write,
-};
-
-BTREE_FLAG(read_in_flight);
-BTREE_FLAG(read_error);
-BTREE_FLAG(need_write);
-BTREE_FLAG(noevict);
-BTREE_FLAG(write_idx);
-BTREE_FLAG(accessed);
-BTREE_FLAG(write_in_flight);
-BTREE_FLAG(write_in_flight_inner);
-BTREE_FLAG(just_written);
-BTREE_FLAG(dying);
-BTREE_FLAG(fake);
-BTREE_FLAG(need_rewrite);
-BTREE_FLAG(never_write);
+BTREE_FLAGS()
+#undef x
 
 static inline struct btree_write *btree_current_write(struct btree *b)
 {
index 6b793c9e95f434f93fdf9ca3abd12d2140d71777..f4ee78e84f718411a013431176d252ba0386614b 100644 (file)
@@ -271,7 +271,7 @@ static struct btree *bch2_btree_node_alloc(struct btree_update *as, unsigned lev
        six_lock_write(&b->c.lock, NULL, NULL);
 
        set_btree_node_accessed(b);
-       set_btree_node_dirty(c, b);
+       set_btree_node_dirty_acct(c, b);
        set_btree_node_need_write(b);
 
        bch2_bset_init_first(b, &b->data->keys);
@@ -868,7 +868,7 @@ static void bch2_btree_interior_update_will_free_node(struct btree_update *as,
                closure_wake_up(&c->btree_interior_update_wait);
        }
 
-       clear_btree_node_dirty(c, b);
+       clear_btree_node_dirty_acct(c, b);
        clear_btree_node_need_write(b);
 
        /*
@@ -1172,7 +1172,7 @@ static void bch2_insert_fixup_btree_ptr(struct btree_update *as,
                bch2_btree_node_iter_advance(node_iter, b);
 
        bch2_btree_bset_insert_key(trans, path, b, node_iter, insert);
-       set_btree_node_dirty(c, b);
+       set_btree_node_dirty_acct(c, b);
        set_btree_node_need_write(b);
 }
 
index 4b0e00f32a9614ed27d274a76b0cd4e2db282c57..94d0b8bd014bfa590ffd08909d64f69461688cb2 100644 (file)
@@ -221,7 +221,7 @@ static bool btree_insert_key_leaf(struct btree_trans *trans,
        bch2_btree_add_journal_pin(c, b, trans->journal_res.seq);
 
        if (unlikely(!btree_node_dirty(b)))
-               set_btree_node_dirty(c, b);
+               set_btree_node_dirty_acct(c, b);
 
        live_u64s_added = (int) b->nr.live_u64s - old_live_u64s;
        u64s_added = (int) bset_u64s(t) - old_u64s;