btrfs-progs: mkfs: do not scan partially initialized devices
authorDavid Sterba <dsterba@suse.com>
Mon, 22 Aug 2016 14:31:11 +0000 (16:31 +0200)
committerDavid Sterba <dsterba@suse.com>
Wed, 24 Aug 2016 12:36:58 +0000 (14:36 +0200)
We call scan ioctl on the devices too early, when most of the filesystem
structures are not yet created. Move the registration to the end, after
the filesystem gets closed.

Signed-off-by: David Sterba <dsterba@suse.com>
mkfs.c

diff --git a/mkfs.c b/mkfs.c
index 1f209b5..0b081dd 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
@@ -1748,9 +1748,6 @@ int main(int argc, char **argv)
                exit(1);
        }
 
-       if (is_block_device(file) == 1)
-               btrfs_register_one_device(file);
-
        if (dev_cnt == 0)
                goto raid_groups;
 
@@ -1796,9 +1793,6 @@ int main(int argc, char **argv)
                        printf("adding device %s id %llu\n", file,
                                (unsigned long long)device->devid);
                }
-
-               if (is_block_device(file) == 1)
-                       btrfs_register_one_device(file);
        }
 
 raid_groups:
@@ -1867,6 +1861,15 @@ raid_groups:
 out:
        ret = close_ctree(root);
        BUG_ON(ret);
+
+       optind = saved_optind;
+       dev_cnt = argc - optind;
+       while (dev_cnt-- > 0) {
+               file = argv[optind++];
+               if (is_block_device(file) == 1)
+                       btrfs_register_one_device(file);
+       }
+
        btrfs_close_all_devices();
        free(label);
        return 0;