diff --git a/cmds-replace.c b/cmds-replace.c index 25e8c7fa..8ed92c44 100644 --- a/cmds-replace.c +++ b/cmds-replace.c @@ -137,13 +137,12 @@ static int cmd_start_replace(int argc, char **argv) char *dstdev; int avoid_reading_from_srcdev = 0; int force_using_targetdev = 0; - u64 total_devs = 1; - struct btrfs_fs_devices *fs_devices_mnt = NULL; struct stat st; u64 dstdev_block_count; int do_not_background = 0; int mixed = 0; DIR *dirstream = NULL; + char estr[100]; /* check test_dev_for_mkfs() for error string size*/ while ((c = getopt(argc, argv, "Brf")) != -1) { switch (c) { @@ -265,15 +264,9 @@ static int cmd_start_replace(int argc, char **argv) start_args.start.srcdevid = 0; } - ret = check_mounted(dstdev); - if (ret < 0) { - fprintf(stderr, "Error checking %s mount status\n", dstdev); - goto leave_with_error; - } - if (ret == 1) { - fprintf(stderr, - "Error, target device %s is in use and currently mounted!\n", - dstdev); + ret = test_dev_for_mkfs(dstdev, force_using_targetdev, estr); + if (ret) { + fprintf(stderr, "%s", estr); goto leave_with_error; } fddstdev = open(dstdev, O_RDWR); @@ -281,23 +274,6 @@ static int cmd_start_replace(int argc, char **argv) fprintf(stderr, "Unable to open %s\n", dstdev); goto leave_with_error; } - ret = btrfs_scan_one_device(fddstdev, dstdev, &fs_devices_mnt, - &total_devs, BTRFS_SUPER_INFO_OFFSET); - if (ret >= 0 && !force_using_targetdev) { - fprintf(stderr, - "Error, target device %s contains filesystem, use '-f' to force overwriting.\n", - dstdev); - goto leave_with_error; - } - ret = fstat(fddstdev, &st); - if (ret) { - fprintf(stderr, "Error: Unable to stat '%s'\n", dstdev); - goto leave_with_error; - } - if (!S_ISBLK(st.st_mode)) { - fprintf(stderr, "Error: '%s' is not a block device\n", dstdev); - goto leave_with_error; - } strncpy((char *)start_args.start.tgtdev_name, dstdev, BTRFS_DEVICE_PATH_NAME_MAX); if (btrfs_prepare_device(fddstdev, dstdev, 1, &dstdev_block_count, 0, diff --git a/utils.c b/utils.c index 15b991ff..c1469a9b 100644 --- a/utils.c +++ b/utils.c @@ -1807,6 +1807,7 @@ int test_dev_for_mkfs(char *file, int force_overwrite, char *estr) { int ret, fd; size_t sz = 100; + struct stat st; ret = is_swap_device(file); if (ret < 0) { @@ -1841,6 +1842,15 @@ int test_dev_for_mkfs(char *file, int force_overwrite, char *estr) strerror(errno)); return 1; } + if (fstat(fd, &st)) { + snprintf(estr, sz, "unable to stat %s: %s\n", file, + strerror(errno)); + return 1; + } + if (!S_ISBLK(st.st_mode)) { + fprintf(stderr, "'%s' is not a block device\n", file); + return 1; + } close(fd); return 0; }