summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2019-08-01 12:50:16 -0400
committerDavid Sterba <dsterba@suse.com>2019-09-09 08:59:07 -0400
commitb5865babb7b44308f0d0ece39756d55ef7628742 (patch)
treed5952c5d4cf74eab0b288de80d43ace609bfbe1e
parent5b28692e0c4ffb7266d359f0d54155156cdfe0a2 (diff)
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>
-rw-r--r--fs/btrfs/extent-tree.c14
-rw-r--r--fs/btrfs/sysfs.c22
-rw-r--r--fs/btrfs/sysfs.h1
3 files changed, 24 insertions, 13 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 37e56b0c0484..05f6464b3123 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -7539,8 +7539,6 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
7539 btrfs_release_global_block_rsv(info); 7539 btrfs_release_global_block_rsv(info);
7540 7540
7541 while (!list_empty(&info->space_info)) { 7541 while (!list_empty(&info->space_info)) {
7542 int i;
7543
7544 space_info = list_entry(info->space_info.next, 7542 space_info = list_entry(info->space_info.next,
7545 struct btrfs_space_info, 7543 struct btrfs_space_info,
7546 list); 7544 list);
@@ -7554,17 +7552,7 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
7554 space_info->bytes_may_use > 0)) 7552 space_info->bytes_may_use > 0))
7555 btrfs_dump_space_info(info, space_info, 0, 0); 7553 btrfs_dump_space_info(info, space_info, 0, 0);
7556 list_del(&space_info->list); 7554 list_del(&space_info->list);
7557 for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) { 7555 btrfs_sysfs_remove_space_info(space_info);
7558 struct kobject *kobj;
7559 kobj = space_info->block_group_kobjs[i];
7560 space_info->block_group_kobjs[i] = NULL;
7561 if (kobj) {
7562 kobject_del(kobj);
7563 kobject_put(kobj);
7564 }
7565 }
7566 kobject_del(&space_info->kobj);
7567 kobject_put(&space_info->kobj);
7568 } 7556 }
7569 return 0; 7557 return 0;
7570} 7558}
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index 5562ce1f7090..4de9bae3e186 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -800,6 +800,28 @@ void btrfs_sysfs_add_block_group_type(struct btrfs_block_group_cache *cache)
800 space_info->block_group_kobjs[index] = &rkobj->kobj; 800 space_info->block_group_kobjs[index] = &rkobj->kobj;
801} 801}
802 802
803/*
804 * Remove sysfs directories for all block group types of a given space info and
805 * the space info as well
806 */
807void btrfs_sysfs_remove_space_info(struct btrfs_space_info *space_info)
808{
809 int i;
810
811 for (i = 0; i < BTRFS_NR_RAID_TYPES; i++) {
812 struct kobject *kobj;
813
814 kobj = space_info->block_group_kobjs[i];
815 space_info->block_group_kobjs[i] = NULL;
816 if (kobj) {
817 kobject_del(kobj);
818 kobject_put(kobj);
819 }
820 }
821 kobject_del(&space_info->kobj);
822 kobject_put(&space_info->kobj);
823}
824
803static const char *alloc_name(u64 flags) 825static const char *alloc_name(u64 flags)
804{ 826{
805 switch (flags) { 827 switch (flags) {
diff --git a/fs/btrfs/sysfs.h b/fs/btrfs/sysfs.h
index 6807d105c027..031697358b6e 100644
--- a/fs/btrfs/sysfs.h
+++ b/fs/btrfs/sysfs.h
@@ -98,5 +98,6 @@ void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info);
98void btrfs_sysfs_add_block_group_type(struct btrfs_block_group_cache *cache); 98void btrfs_sysfs_add_block_group_type(struct btrfs_block_group_cache *cache);
99int btrfs_sysfs_add_space_info_type(struct btrfs_fs_info *fs_info, 99int btrfs_sysfs_add_space_info_type(struct btrfs_fs_info *fs_info,
100 struct btrfs_space_info *space_info); 100 struct btrfs_space_info *space_info);
101void btrfs_sysfs_remove_space_info(struct btrfs_space_info *space_info);
101 102
102#endif 103#endif