static void free_fs_devices(struct btrfs_fs_devices *fs_devices)
 {
        struct btrfs_device *device;
+
        WARN_ON(fs_devices->opened);
        while (!list_empty(&fs_devices->devices)) {
                device = list_entry(fs_devices->devices.next,
 
        mutex_lock(&uuid_mutex);
        close_fs_devices(fs_devices);
-       if (!fs_devices->opened)
+       if (!fs_devices->opened) {
                list_splice_init(&fs_devices->seed_list, &list);
 
+               /*
+                * If the struct btrfs_fs_devices is not assembled with any
+                * other device, it can be re-initialized during the next mount
+                * without the needing device-scan step. Therefore, it can be
+                * fully freed.
+                */
+               if (fs_devices->num_devices == 1) {
+                       list_del(&fs_devices->fs_list);
+                       free_fs_devices(fs_devices);
+               }
+       }
+
+
        list_for_each_entry_safe(fs_devices, tmp, &list, seed_list) {
                close_fs_devices(fs_devices);
                list_del(&fs_devices->seed_list);