summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2018-01-20 13:04:48 -0800
committerDavid Sterba <dsterba@suse.com>2018-03-06 11:28:37 +0100
commitafb04260169911c9ecab2524fad03b86bc744dd3 (patch)
treeea50e947ed8211dcd97a39a4f8c1969065ff23ee
parent9e73a416f0acbc6c215532e2441f5be10b9e166a (diff)
btrfs-progs: use libbtrfsutil for subvol delete
Most of the interesting part of this command is the commit mode, so this only saves a little bit of code. Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--cmds-subvolume.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/cmds-subvolume.c b/cmds-subvolume.c
index 149cd3fc..ad5bc19e 100644
--- a/cmds-subvolume.c
+++ b/cmds-subvolume.c
@@ -264,7 +264,6 @@ static int cmd_subvol_delete(int argc, char **argv)
int res, ret = 0;
int cnt;
int fd = -1;
- struct btrfs_ioctl_vol_args args;
char *dname, *vname, *cpath;
char *dupdname = NULL;
char *dupvname = NULL;
@@ -276,6 +275,7 @@ static int cmd_subvol_delete(int argc, char **argv)
char uuidbuf[BTRFS_UUID_UNPARSED_SIZE];
struct seen_fsid *seen_fsid_hash[SEEN_FSID_HASH_SIZE] = { NULL, };
enum { COMMIT_AFTER = 1, COMMIT_EACH = 2 };
+ enum btrfs_util_error err;
while (1) {
int c;
@@ -319,14 +319,9 @@ static int cmd_subvol_delete(int argc, char **argv)
again:
path = argv[cnt];
- res = test_issubvolume(path);
- if (res < 0) {
- error("cannot access subvolume %s: %s", path, strerror(-res));
- ret = 1;
- goto out;
- }
- if (!res) {
- error("not a subvolume: %s", path);
+ err = btrfs_util_is_subvolume(path);
+ if (err) {
+ error_btrfs_util(err);
ret = 1;
goto out;
}
@@ -352,11 +347,10 @@ again:
printf("Delete subvolume (%s): '%s/%s'\n",
commit_mode == COMMIT_EACH || (commit_mode == COMMIT_AFTER && cnt + 1 == argc)
? "commit" : "no-commit", dname, vname);
- memset(&args, 0, sizeof(args));
- strncpy_null(args.name, vname);
- res = ioctl(fd, BTRFS_IOC_SNAP_DESTROY, &args);
- if(res < 0 ){
- error("cannot delete '%s/%s': %m", dname, vname);
+
+ err = btrfs_util_delete_subvolume_fd(fd, vname, 0);
+ if (err) {
+ error_btrfs_util(err);
ret = 1;
goto out;
}