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:
Родитель
3b5bb73bd8
Коммит
444e751698
|
@ -782,6 +782,36 @@ failure:
|
|||
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)
|
||||
{
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
|
|
|
@ -90,4 +90,7 @@ int btrfs_sysfs_add_fsid(struct btrfs_fs_devices *fs_devs,
|
|||
struct kobject *parent);
|
||||
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_feature_update(struct btrfs_fs_info *fs_info,
|
||||
u64 bit, enum btrfs_feature_set set);
|
||||
|
||||
#endif /* _BTRFS_SYSFS_H_ */
|
||||
|
|
Загрузка…
Ссылка в новой задаче