summaryrefslogtreecommitdiff
path: root/cmds-device.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmds-device.c')
-rw-r--r--cmds-device.c36
1 files changed, 11 insertions, 25 deletions
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] <device> [<device>...] <path>",
"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);