btrfs: sysfs: introduce helper for syncing bits with sysfs files
The files under /sys/fs/UUID/features get out of sync with the actual incompat bits set for the filesystem if they change after mount. We're going to sync them and need a helper to do that. Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
3b5bb73bd8
commit
444e751698
|
@ -782,6 +782,36 @@ failure:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Change per-fs features in /sys/fs/btrfs/UUID/features to match current
|
||||||
|
* values in superblock. Call after any changes to incompat/compat_ro flags
|
||||||
|
*/
|
||||||
|
void btrfs_sysfs_feature_update(struct btrfs_fs_info *fs_info,
|
||||||
|
u64 bit, enum btrfs_feature_set set)
|
||||||
|
{
|
||||||
|
struct btrfs_fs_devices *fs_devs;
|
||||||
|
struct kobject *fsid_kobj;
|
||||||
|
u64 features;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!fs_info)
|
||||||
|
return;
|
||||||
|
|
||||||
|
features = get_features(fs_info, set);
|
||||||
|
ASSERT(bit & supported_feature_masks[set]);
|
||||||
|
|
||||||
|
fs_devs = fs_info->fs_devices;
|
||||||
|
fsid_kobj = &fs_devs->fsid_kobj;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: this is too heavy to update just one value, ideally we'd like
|
||||||
|
* to use sysfs_update_group but some refactoring is needed first.
|
||||||
|
*/
|
||||||
|
sysfs_remove_group(fsid_kobj, &btrfs_feature_attr_group);
|
||||||
|
ret = sysfs_create_group(fsid_kobj, &btrfs_feature_attr_group);
|
||||||
|
}
|
||||||
|
|
||||||
static int btrfs_init_debugfs(void)
|
static int btrfs_init_debugfs(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
|
|
|
@ -90,4 +90,7 @@ int btrfs_sysfs_add_fsid(struct btrfs_fs_devices *fs_devs,
|
||||||
struct kobject *parent);
|
struct kobject *parent);
|
||||||
int btrfs_sysfs_add_device(struct btrfs_fs_devices *fs_devs);
|
int btrfs_sysfs_add_device(struct btrfs_fs_devices *fs_devs);
|
||||||
void btrfs_sysfs_remove_fsid(struct btrfs_fs_devices *fs_devs);
|
void btrfs_sysfs_remove_fsid(struct btrfs_fs_devices *fs_devs);
|
||||||
|
void btrfs_sysfs_feature_update(struct btrfs_fs_info *fs_info,
|
||||||
|
u64 bit, enum btrfs_feature_set set);
|
||||||
|
|
||||||
#endif /* _BTRFS_SYSFS_H_ */
|
#endif /* _BTRFS_SYSFS_H_ */
|
||||||
|
|
Loading…
Reference in New Issue