]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
btrfs: sysfs: make UUID/debug have its own kobject
authorDennis Zhou <dennis@kernel.org>
Sat, 14 Dec 2019 00:22:18 +0000 (16:22 -0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 20 Jan 2020 15:40:58 +0000 (16:40 +0100)
Btrfs only allowed attributes to be exposed in debug/. Let's let other
groups be created by making debug its own kobject.

This also makes the per-fs debug options separate from the global
features mount attributes. This seems to be needed as
sysfs_create_files() requires const struct attribute * while
sysfs_create_group() can take struct attribute *. This seems nicer as
per file system, you'll probably use to_fs_info().

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Dennis Zhou <dennis@kernel.org>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/sysfs.c

index d15a4aa721aaa203acabf7a34f6f5548992139cc..0626e5562993494f79d5239837cf0246fa3274b9 100644 (file)
@@ -927,6 +927,10 @@ struct btrfs_fs_info {
        spinlock_t ref_verify_lock;
        struct rb_root block_tree;
 #endif
+
+#ifdef CONFIG_BTRFS_DEBUG
+       struct kobject *debug_kobj;
+#endif
 };
 
 static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb)
index 4c022757ffa43e79b66cd7a744225105ed966185..5a09c7a14124d3980477ad0de9390d21f19cf5e6 100644 (file)
@@ -344,6 +344,10 @@ static const struct attribute_group btrfs_static_feature_attr_group = {
  * /sys/fs/btrfs/debug - applies to module or all filesystems
  * /sys/fs/btrfs/UUID  - applies only to the given filesystem
  */
+static const struct attribute *btrfs_debug_mount_attrs[] = {
+       NULL,
+};
+
 static struct attribute *btrfs_debug_feature_attrs[] = {
        NULL
 };
@@ -772,8 +776,11 @@ void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info)
                kobject_put(fs_info->space_info_kobj);
        }
 #ifdef CONFIG_BTRFS_DEBUG
-       sysfs_remove_group(&fs_info->fs_devices->fsid_kobj,
-                          &btrfs_debug_feature_attr_group);
+       if (fs_info->debug_kobj) {
+               sysfs_remove_files(fs_info->debug_kobj, btrfs_debug_mount_attrs);
+               kobject_del(fs_info->debug_kobj);
+               kobject_put(fs_info->debug_kobj);
+       }
 #endif
        addrm_unknown_feature_attrs(fs_info, false);
        sysfs_remove_group(&fs_info->fs_devices->fsid_kobj, &btrfs_feature_attr_group);
@@ -1111,8 +1118,13 @@ int btrfs_sysfs_add_mounted(struct btrfs_fs_info *fs_info)
                goto failure;
 
 #ifdef CONFIG_BTRFS_DEBUG
-       error = sysfs_create_group(fsid_kobj,
-                                  &btrfs_debug_feature_attr_group);
+       fs_info->debug_kobj = kobject_create_and_add("debug", fsid_kobj);
+       if (!fs_info->debug_kobj) {
+               error = -ENOMEM;
+               goto failure;
+       }
+
+       error = sysfs_create_files(fs_info->debug_kobj, btrfs_debug_mount_attrs);
        if (error)
                goto failure;
 #endif