diff mbox

[04/13] btrfs-progs: mkfs: do not scan partially initialized devices

Message ID 1471947917-5324-5-git-send-email-dsterba@suse.com (mailing list archive)
State Accepted
Headers show

Commit Message

David Sterba Aug. 23, 2016, 10:25 a.m. UTC
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 | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
diff mbox

Patch

diff --git a/mkfs.c b/mkfs.c
index 1f209b54ff79..0b081dd44457 100644
--- 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 @@  int main(int argc, char **argv)
 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;