btrfs: generate lockdep keyset names at compile time
authorDavid Sterba <dsterba@suse.com>
Tue, 29 Sep 2020 12:56:39 +0000 (14:56 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 8 Dec 2020 14:53:50 +0000 (15:53 +0100)
The names in btrfs_lockdep_keysets are generated from a simple pattern
using snprintf but we can generate them directly with some macro magic
and remove the helpers.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c
fs/btrfs/disk-io.h
fs/btrfs/super.c

index c524be5..142bd84 100644 (file)
@@ -150,40 +150,42 @@ struct async_submit_bio {
 #  error
 # endif
 
+#define DEFINE_LEVEL(stem, level)                                      \
+       .names[level] = "btrfs-" stem "-0" #level,
+
+#define DEFINE_NAME(stem)                                              \
+       DEFINE_LEVEL(stem, 0)                                           \
+       DEFINE_LEVEL(stem, 1)                                           \
+       DEFINE_LEVEL(stem, 2)                                           \
+       DEFINE_LEVEL(stem, 3)                                           \
+       DEFINE_LEVEL(stem, 4)                                           \
+       DEFINE_LEVEL(stem, 5)                                           \
+       DEFINE_LEVEL(stem, 6)                                           \
+       DEFINE_LEVEL(stem, 7)
+
 static struct btrfs_lockdep_keyset {
        u64                     id;             /* root objectid */
-       const char              *name_stem;     /* lock name stem */
+       /* Longest entry: btrfs-free-space-00 */
        char                    names[BTRFS_MAX_LEVEL][20];
        struct lock_class_key   keys[BTRFS_MAX_LEVEL];
 } btrfs_lockdep_keysets[] = {
-       { .id = BTRFS_ROOT_TREE_OBJECTID,       .name_stem = "root"     },
-       { .id = BTRFS_EXTENT_TREE_OBJECTID,     .name_stem = "extent"   },
-       { .id = BTRFS_CHUNK_TREE_OBJECTID,      .name_stem = "chunk"    },
-       { .id = BTRFS_DEV_TREE_OBJECTID,        .name_stem = "dev"      },
-       { .id = BTRFS_FS_TREE_OBJECTID,         .name_stem = "fs"       },
-       { .id = BTRFS_CSUM_TREE_OBJECTID,       .name_stem = "csum"     },
-       { .id = BTRFS_QUOTA_TREE_OBJECTID,      .name_stem = "quota"    },
-       { .id = BTRFS_TREE_LOG_OBJECTID,        .name_stem = "log"      },
-       { .id = BTRFS_TREE_RELOC_OBJECTID,      .name_stem = "treloc"   },
-       { .id = BTRFS_DATA_RELOC_TREE_OBJECTID, .name_stem = "dreloc"   },
-       { .id = BTRFS_UUID_TREE_OBJECTID,       .name_stem = "uuid"     },
-       { .id = BTRFS_FREE_SPACE_TREE_OBJECTID, .name_stem = "free-space" },
-       { .id = 0,                              .name_stem = "tree"     },
+       { .id = BTRFS_ROOT_TREE_OBJECTID,       DEFINE_NAME("root")     },
+       { .id = BTRFS_EXTENT_TREE_OBJECTID,     DEFINE_NAME("extent")   },
+       { .id = BTRFS_CHUNK_TREE_OBJECTID,      DEFINE_NAME("chunk")    },
+       { .id = BTRFS_DEV_TREE_OBJECTID,        DEFINE_NAME("dev")      },
+       { .id = BTRFS_FS_TREE_OBJECTID,         DEFINE_NAME("fs")       },
+       { .id = BTRFS_CSUM_TREE_OBJECTID,       DEFINE_NAME("csum")     },
+       { .id = BTRFS_QUOTA_TREE_OBJECTID,      DEFINE_NAME("quota")    },
+       { .id = BTRFS_TREE_LOG_OBJECTID,        DEFINE_NAME("log")      },
+       { .id = BTRFS_TREE_RELOC_OBJECTID,      DEFINE_NAME("treloc")   },
+       { .id = BTRFS_DATA_RELOC_TREE_OBJECTID, DEFINE_NAME("dreloc")   },
+       { .id = BTRFS_UUID_TREE_OBJECTID,       DEFINE_NAME("uuid")     },
+       { .id = BTRFS_FREE_SPACE_TREE_OBJECTID, DEFINE_NAME("free-space") },
+       { .id = 0,                              DEFINE_NAME("tree")     },
 };
 
-void __init btrfs_init_lockdep(void)
-{
-       int i, j;
-
-       /* initialize lockdep class names */
-       for (i = 0; i < ARRAY_SIZE(btrfs_lockdep_keysets); i++) {
-               struct btrfs_lockdep_keyset *ks = &btrfs_lockdep_keysets[i];
-
-               for (j = 0; j < ARRAY_SIZE(ks->names); j++)
-                       snprintf(ks->names[j], sizeof(ks->names[j]),
-                                "btrfs-%s-%02d", ks->name_stem, j);
-       }
-}
+#undef DEFINE_LEVEL
+#undef DEFINE_NAME
 
 void btrfs_set_buffer_lockdep_class(u64 objectid, struct extent_buffer *eb,
                                    int level)
index 182540b..d478942 100644 (file)
@@ -135,12 +135,9 @@ int __init btrfs_end_io_wq_init(void);
 void __cold btrfs_end_io_wq_exit(void);
 
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
-void btrfs_init_lockdep(void);
 void btrfs_set_buffer_lockdep_class(u64 objectid,
                                    struct extent_buffer *eb, int level);
 #else
-static inline void btrfs_init_lockdep(void)
-{ }
 static inline void btrfs_set_buffer_lockdep_class(u64 objectid,
                                        struct extent_buffer *eb, int level)
 {
index 1ffa50b..9f51b0a 100644 (file)
@@ -2572,8 +2572,6 @@ static int __init init_btrfs_fs(void)
        if (err)
                goto free_end_io_wq;
 
-       btrfs_init_lockdep();
-
        btrfs_print_mod_info();
 
        err = btrfs_run_sanity_tests();