@@ -931,6 +931,7 @@ struct btrfs_fs_info {
#ifdef CONFIG_BTRFS_DEBUG
struct kobject *debug_kobj;
+ struct kobject *discard_kobj;
#endif
};
@@ -313,6 +313,13 @@ static const struct attribute_group btrfs_static_feature_attr_group = {
#ifdef CONFIG_BTRFS_DEBUG
+/*
+ * Discard statistics and tunables.
+ */
+static const struct attribute *discard_attrs[] = {
+ NULL,
+};
+
/*
* Runtime debugging exported via sysfs
*
@@ -737,6 +744,11 @@ void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info)
kobject_put(fs_info->space_info_kobj);
}
#ifdef CONFIG_BTRFS_DEBUG
+ if (fs_info->discard_kobj) {
+ sysfs_remove_files(fs_info->discard_kobj, discard_attrs);
+ kobject_del(fs_info->discard_kobj);
+ kobject_put(fs_info->discard_kobj);
+ }
if (fs_info->debug_kobj) {
sysfs_remove_files(fs_info->debug_kobj,
btrfs_debug_mount_attrs);
@@ -1092,6 +1104,18 @@ int btrfs_sysfs_add_mounted(struct btrfs_fs_info *fs_info)
btrfs_debug_mount_attrs);
if (error)
goto failure;
+
+ /* Discard directory. */
+ fs_info->discard_kobj = kobject_create_and_add("discard",
+ fs_info->debug_kobj);
+ if (!fs_info->discard_kobj) {
+ error = -ENOMEM;
+ goto failure;
+ }
+
+ error = sysfs_create_files(fs_info->discard_kobj, discard_attrs);
+ if (error)
+ goto failure;
#endif
error = addrm_unknown_feature_attrs(fs_info, true);
Setup sysfs directory for discard stats + tunables. Signed-off-by: Dennis Zhou <dennis@kernel.org> --- fs/btrfs/ctree.h | 1 + fs/btrfs/sysfs.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+)