aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/sysfs.c')
-rw-r--r--fs/btrfs/sysfs.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index 906f7ed6fc80..6986886243bf 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -782,6 +782,36 @@ failure:
782 return error; 782 return error;
783} 783}
784 784
785
786/*
787 * Change per-fs features in /sys/fs/btrfs/UUID/features to match current
788 * values in superblock. Call after any changes to incompat/compat_ro flags
789 */
790void btrfs_sysfs_feature_update(struct btrfs_fs_info *fs_info,
791 u64 bit, enum btrfs_feature_set set)
792{
793 struct btrfs_fs_devices *fs_devs;
794 struct kobject *fsid_kobj;
795 u64 features;
796 int ret;
797
798 if (!fs_info)
799 return;
800
801 features = get_features(fs_info, set);
802 ASSERT(bit & supported_feature_masks[set]);
803
804 fs_devs = fs_info->fs_devices;
805 fsid_kobj = &fs_devs->fsid_kobj;
806
807 /*
808 * FIXME: this is too heavy to update just one value, ideally we'd like
809 * to use sysfs_update_group but some refactoring is needed first.
810 */
811 sysfs_remove_group(fsid_kobj, &btrfs_feature_attr_group);
812 ret = sysfs_create_group(fsid_kobj, &btrfs_feature_attr_group);
813}
814
785static int btrfs_init_debugfs(void) 815static int btrfs_init_debugfs(void)
786{ 816{
787#ifdef CONFIG_DEBUG_FS 817#ifdef CONFIG_DEBUG_FS