Commit 93945cb4 authored by Dennis Zhou's avatar Dennis Zhou Committed by David Sterba

btrfs: sysfs: make UUID/debug have its own kobject

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: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
Signed-off-by: default avatarDennis Zhou <dennis@kernel.org>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 71e8978e
...@@ -927,6 +927,10 @@ struct btrfs_fs_info { ...@@ -927,6 +927,10 @@ struct btrfs_fs_info {
spinlock_t ref_verify_lock; spinlock_t ref_verify_lock;
struct rb_root block_tree; struct rb_root block_tree;
#endif #endif
#ifdef CONFIG_BTRFS_DEBUG
struct kobject *debug_kobj;
#endif
}; };
static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb) static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb)
......
...@@ -344,6 +344,10 @@ static const struct attribute_group btrfs_static_feature_attr_group = { ...@@ -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/debug - applies to module or all filesystems
* /sys/fs/btrfs/UUID - applies only to the given filesystem * /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[] = { static struct attribute *btrfs_debug_feature_attrs[] = {
NULL NULL
}; };
...@@ -772,8 +776,11 @@ void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info) ...@@ -772,8 +776,11 @@ void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info)
kobject_put(fs_info->space_info_kobj); kobject_put(fs_info->space_info_kobj);
} }
#ifdef CONFIG_BTRFS_DEBUG #ifdef CONFIG_BTRFS_DEBUG
sysfs_remove_group(&fs_info->fs_devices->fsid_kobj, if (fs_info->debug_kobj) {
&btrfs_debug_feature_attr_group); sysfs_remove_files(fs_info->debug_kobj, btrfs_debug_mount_attrs);
kobject_del(fs_info->debug_kobj);
kobject_put(fs_info->debug_kobj);
}
#endif #endif
addrm_unknown_feature_attrs(fs_info, false); addrm_unknown_feature_attrs(fs_info, false);
sysfs_remove_group(&fs_info->fs_devices->fsid_kobj, &btrfs_feature_attr_group); 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) ...@@ -1111,8 +1118,13 @@ int btrfs_sysfs_add_mounted(struct btrfs_fs_info *fs_info)
goto failure; goto failure;
#ifdef CONFIG_BTRFS_DEBUG #ifdef CONFIG_BTRFS_DEBUG
error = sysfs_create_group(fsid_kobj, fs_info->debug_kobj = kobject_create_and_add("debug", fsid_kobj);
&btrfs_debug_feature_attr_group); if (!fs_info->debug_kobj) {
error = -ENOMEM;
goto failure;
}
error = sysfs_create_files(fs_info->debug_kobj, btrfs_debug_mount_attrs);
if (error) if (error)
goto failure; goto failure;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment