Commit 7ad3912a authored by Anand Jain's avatar Anand Jain Committed by David Sterba

btrfs: handle errors in btrfs_sysfs_add_fs_devices

btrfs_sysfs_add_fs_devices() is called by btrfs_sysfs_add_mounted().
btrfs_sysfs_add_mounted() assumes that btrfs_sysfs_add_fs_devices() will
either add sysfs entries for all the devices or none. So this patch keeps up
to its caller expecatation and cleans up the created sysfs entries if it
has to fail at some device in the list.
Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 30b0e4e0
...@@ -1362,18 +1362,22 @@ static int btrfs_sysfs_add_fs_devices(struct btrfs_fs_devices *fs_devices) ...@@ -1362,18 +1362,22 @@ static int btrfs_sysfs_add_fs_devices(struct btrfs_fs_devices *fs_devices)
list_for_each_entry(device, &fs_devices->devices, dev_list) { list_for_each_entry(device, &fs_devices->devices, dev_list) {
ret = btrfs_sysfs_add_device(device); ret = btrfs_sysfs_add_device(device);
if (ret) if (ret)
return ret; goto fail;
} }
list_for_each_entry(seed, &fs_devices->seed_list, seed_list) { list_for_each_entry(seed, &fs_devices->seed_list, seed_list) {
list_for_each_entry(device, &seed->devices, dev_list) { list_for_each_entry(device, &seed->devices, dev_list) {
ret = btrfs_sysfs_add_device(device); ret = btrfs_sysfs_add_device(device);
if (ret) if (ret)
return ret; goto fail;
} }
} }
return 0; return 0;
fail:
btrfs_sysfs_remove_fs_devices(fs_devices);
return ret;
} }
void btrfs_kobject_uevent(struct block_device *bdev, enum kobject_action action) void btrfs_kobject_uevent(struct block_device *bdev, enum kobject_action action)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment