btrfs: initialize sysfs devid and device link for seed device
authorAnand Jain <anand.jain@oracle.com>
Fri, 4 Sep 2020 17:34:28 +0000 (01:34 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 7 Oct 2020 10:12:21 +0000 (12:12 +0200)
We don't initialize the sysfs devid kobject and device-link yet for the
seed devices in an sprouted filesystem.
So this patch initializes the seed device devid kobject and the device
link in the sysfs.

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

index 7aed0712f1834dce4efc02611883d1c4151145e4..f66632fefe0acf7d12a54f16e20719fb84c8e4d9 100644 (file)
@@ -975,9 +975,15 @@ void btrfs_sysfs_remove_fsid(struct btrfs_fs_devices *fs_devs)
 static void btrfs_sysfs_remove_fs_devices(struct btrfs_fs_devices *fs_devices)
 {
        struct btrfs_device *device;
+       struct btrfs_fs_devices *seed;
 
        list_for_each_entry(device, &fs_devices->devices, dev_list)
                btrfs_sysfs_remove_device(device);
+
+       list_for_each_entry(seed, &fs_devices->seed_list, seed_list) {
+               list_for_each_entry(device, &seed->devices, dev_list)
+                       btrfs_sysfs_remove_device(device);
+       }
 }
 
 void btrfs_sysfs_remove_mounted(struct btrfs_fs_info *fs_info)
@@ -1351,6 +1357,7 @@ static int btrfs_sysfs_add_fs_devices(struct btrfs_fs_devices *fs_devices)
 {
        int ret;
        struct btrfs_device *device;
+       struct btrfs_fs_devices *seed;
 
        list_for_each_entry(device, &fs_devices->devices, dev_list) {
                ret = btrfs_sysfs_add_device(device);
@@ -1358,6 +1365,14 @@ static int btrfs_sysfs_add_fs_devices(struct btrfs_fs_devices *fs_devices)
                        return ret;
        }
 
+       list_for_each_entry(seed, &fs_devices->seed_list, seed_list) {
+               list_for_each_entry(device, &seed->devices, dev_list) {
+                       ret = btrfs_sysfs_add_device(device);
+                       if (ret)
+                               return ret;
+               }
+       }
+
        return 0;
 }