diff --git a/cmds-device.c b/cmds-device.c index 12c802e1..7cfc3473 100644 --- a/cmds-device.c +++ b/cmds-device.c @@ -40,6 +40,7 @@ static const char * const cmd_add_dev_usage[] = { "btrfs device add [options] [...] ", "Add a device to a filesystem", "-K|--nodiscard do not perform whole device TRIM", + "-f|--force force overwrite existing filesystem on the disk", NULL }; @@ -49,14 +50,17 @@ static int cmd_add_dev(int argc, char **argv) int i, fdmnt, ret=0, e; DIR *dirstream = NULL; int discard = 1; + int force = 0; + char estr[100]; while (1) { int long_index; static struct option long_options[] = { { "nodiscard", optional_argument, NULL, 'K'}, + { "force", no_argument, NULL, 'f'}, { 0, 0, 0, 0 } }; - int c = getopt_long(argc, argv, "K", long_options, + int c = getopt_long(argc, argv, "Kf", long_options, &long_index); if (c < 0) break; @@ -64,6 +68,9 @@ static int cmd_add_dev(int argc, char **argv) case 'K': discard = 0; break; + case 'f': + force = 1; + break; default: usage(cmd_add_dev_usage); } @@ -86,19 +93,11 @@ static int cmd_add_dev(int argc, char **argv) struct btrfs_ioctl_vol_args ioctl_args; int devfd, res; u64 dev_block_count = 0; - struct stat st; int mixed = 0; - res = check_mounted(argv[i]); - if (res < 0) { - fprintf(stderr, "error checking %s mount status\n", - argv[i]); - ret++; - continue; - } - if (res == 1) { - fprintf(stderr, "%s is mounted\n", argv[i]); - ret++; + res = test_dev_for_mkfs(argv[i], force, estr); + if (res) { + fprintf(stderr, "%s", estr); continue; } @@ -108,19 +107,6 @@ static int cmd_add_dev(int argc, char **argv) ret++; continue; } - res = fstat(devfd, &st); - if (res) { - fprintf(stderr, "ERROR: Unable to stat '%s'\n", argv[i]); - close(devfd); - ret++; - continue; - } - if (!S_ISBLK(st.st_mode)) { - fprintf(stderr, "ERROR: '%s' is not a block device\n", argv[i]); - close(devfd); - ret++; - continue; - } res = btrfs_prepare_device(devfd, argv[i], 1, &dev_block_count, 0, &mixed, discard); diff --git a/man/btrfs.8.in b/man/btrfs.8.in index b94df2e2..d86ec086 100644 --- a/man/btrfs.8.in +++ b/man/btrfs.8.in @@ -47,7 +47,7 @@ btrfs \- control a btrfs filesystem \fBbtrfs\fP \fB[filesystem] balance status\fP [-v] \fI\fP .PP .PP -\fBbtrfs\fP \fBdevice add\fP [-K] \fI\fP [\fI...\fP] \fI\fP +\fBbtrfs\fP \fBdevice add\fP [-Kf] \fI\fP [\fI...\fP] \fI\fP .PP \fBbtrfs\fP \fBdevice delete\fP \fI\fP [\fI...\fP] \fI\fP .PP @@ -383,7 +383,7 @@ be verbose .RE .TP -\fBdevice add\fR\fI [-K] \fP[\fI...\fP] \fI\fR +\fBdevice add\fR\fI [-Kf] \fP[\fI...\fP] \fI\fR Add device(s) to the filesystem identified by \fI\fR. If applicable, a whole device discard (TRIM) operation is performed. .RS @@ -391,6 +391,8 @@ If applicable, a whole device discard (TRIM) operation is performed. \fIOptions\fR .IP "\fB-K|--nodiscard\fP" 5 do not perform discard by default +.IP "\fB-f|--force\fP" 5 +force overwrite of existing filesystem on the given disk(s) .RE .TP