btrfs: factor out sysfs code for deleting block group and space infos
The helpers to create block group and space info directories already live in sysfs.c, move the deletion part there too. Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
5b28692e0c
commit
b5865babb7
|
@ -7539,8 +7539,6 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
|
||||||
btrfs_release_global_block_rsv(info);
|
btrfs_release_global_block_rsv(info);
|
||||||
|
|
||||||
while (!list_empty(&info->space_info)) {
|
while (!list_empty(&info->space_info)) {
|
||||||
int i;
|
|
||||||
|
|
||||||
space_info = list_entry(info->space_info.next,
|
space_info = list_entry(info->space_info.next,
|
||||||
struct btrfs_space_info,
|
struct btrfs_space_info,
|
||||||
list);
|
list);
|
||||||
|
@ -7554,17 +7552,7 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
|
||||||
space_info->bytes_may_use > 0))
|
space_info->bytes_may_use > 0))
|
||||||
btrfs_dump_space_info(info, space_info, 0, 0);
|
btrfs_dump_space_info(info, space_info, 0, 0);
|
||||||
list_del(&space_info->list);
|
list_del(&space_info->list);
|
||||||
for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) {
|
btrfs_sysfs_remove_space_info(space_info);
|
||||||
struct kobject *kobj;
|
|
||||||
kobj = space_info->block_group_kobjs[i];
|
|
||||||
space_info->block_group_kobjs[i] = NULL;
|
|
||||||
if (kobj) {
|
|
||||||
kobject_del(kobj);
|
|
||||||
kobject_put(kobj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
kobject_del(&space_info->kobj);
|
|
||||||
kobject_put(&space_info->kobj);
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -800,6 +800,28 @@ void btrfs_sysfs_add_block_group_type(struct btrfs_block_group_cache *cache)
|
||||||
space_info->block_group_kobjs[index] = &rkobj->kobj;
|
space_info->block_group_kobjs[index] = &rkobj->kobj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove sysfs directories for all block group types of a given space info and
|
||||||
|
* the space info as well
|
||||||
|
*/
|
||||||
|
void btrfs_sysfs_remove_space_info(struct btrfs_space_info *space_info)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) {
|
||||||
|
struct kobject *kobj;
|
||||||
|
|
||||||
|
kobj = space_info->block_group_kobjs[i];
|
||||||
|
space_info->block_group_kobjs[i] = NULL;
|
||||||
|
if (kobj) {
|
||||||
|
kobject_del(kobj);
|
||||||
|
kobject_put(kobj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
kobject_del(&space_info->kobj);
|
||||||
|
kobject_put(&space_info->kobj);
|
||||||
|
}
|
||||||
|
|
||||||
static const char *alloc_name(u64 flags)
|
static const char *alloc_name(u64 flags)
|
||||||
{
|
{
|
||||||
switch (flags) {
|
switch (flags) {
|
||||||
|
|
|
@ -98,5 +98,6 @@ void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info);
|
||||||
void btrfs_sysfs_add_block_group_type(struct btrfs_block_group_cache *cache);
|
void btrfs_sysfs_add_block_group_type(struct btrfs_block_group_cache *cache);
|
||||||
int btrfs_sysfs_add_space_info_type(struct btrfs_fs_info *fs_info,
|
int btrfs_sysfs_add_space_info_type(struct btrfs_fs_info *fs_info,
|
||||||
struct btrfs_space_info *space_info);
|
struct btrfs_space_info *space_info);
|
||||||
|
void btrfs_sysfs_remove_space_info(struct btrfs_space_info *space_info);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue