Btrfs: sysfs: fix, undo sysfs device links
authorAnand Jain <Anand.Jain@oracle.com>
Mon, 9 Mar 2015 22:38:21 +0000 (06:38 +0800)
committerDavid Sterba <dsterba@suse.cz>
Wed, 27 May 2015 10:27:19 +0000 (12:27 +0200)
Theoritically need to remove the device links attributes, but since its entire device
kobject was removed, so there wasn't any issue of about it. Just do it nicely.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
fs/btrfs/sysfs.c

index db2f8ae..ca07861 100644 (file)
@@ -522,6 +522,7 @@ void btrfs_sysfs_remove_one(struct btrfs_fs_info *fs_info)
                kobject_del(fs_info->space_info_kobj);
                kobject_put(fs_info->space_info_kobj);
        }
+       btrfs_kobj_rm_device(fs_info, NULL);
        kobject_del(fs_info->device_dir_kobj);
        kobject_put(fs_info->device_dir_kobj);
        addrm_unknown_feature_attrs(fs_info, false);
@@ -604,6 +605,8 @@ static void init_feature_attrs(void)
        }
 }
 
+/* when one_device is NULL, it removes all device links */
+
 int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
                struct btrfs_device *one_device)
 {
@@ -621,6 +624,20 @@ int btrfs_kobj_rm_device(struct btrfs_fs_info *fs_info,
                                                disk_kobj->name);
        }
 
+       if (one_device)
+               return 0;
+
+       list_for_each_entry(one_device,
+                       &fs_info->fs_devices->devices, dev_list) {
+               if (!one_device->bdev)
+                       continue;
+               disk = one_device->bdev->bd_part;
+               disk_kobj = &part_to_dev(disk)->kobj;
+
+               sysfs_remove_link(fs_info->device_dir_kobj,
+                                               disk_kobj->name);
+       }
+
        return 0;
 }