summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Sandoval <osandov@fb.com>2018-01-21 00:24:50 -0800
committerDavid Sterba <dsterba@suse.com>2018-03-06 11:28:38 +0100
commitf0a376df4733dc6f0f0cdc529f4e7df64806f3f6 (patch)
tree6645ab539231cdda40e772d5b14ada360fed278d
parentbbf7acbef09c6f35ab276e5c7a9e20a212a02308 (diff)
btrfs-progs: replace test_issubvolume() with btrfs_util_is_subvolume()
This gets the remaining occurrences that weren't covered by previous conversions. Signed-off-by: Omar Sandoval <osandov@fb.com> [ fixup test_issubvolume due to removed dependency patch ] Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--cmds-qgroup.c11
-rw-r--r--cmds-subvolume.c21
-rw-r--r--utils.c34
-rw-r--r--utils.h1
4 files changed, 16 insertions, 51 deletions
diff --git a/cmds-qgroup.c b/cmds-qgroup.c
index 2499a28..9320690 100644
--- a/cmds-qgroup.c
+++ b/cmds-qgroup.c
@@ -427,6 +427,7 @@ static int cmd_qgroup_limit(int argc, char **argv)
int compressed = 0;
int exclusive = 0;
DIR *dirstream = NULL;
+ enum btrfs_util_error err;
while (1) {
int c = getopt(argc, argv, "ce");
@@ -467,13 +468,9 @@ static int cmd_qgroup_limit(int argc, char **argv)
if (argc - optind == 2) {
args.qgroupid = 0;
path = argv[optind + 1];
- ret = test_issubvolume(path);
- if (ret < 0) {
- error("cannot access '%s': %s", path, strerror(-ret));
- return 1;
- }
- if (!ret) {
- error("'%s' is not a subvolume", path);
+ err = btrfs_util_is_subvolume(path);
+ if (err) {
+ error_btrfs_util(err);
return 1;
}
/*
diff --git a/cmds-subvolume.c b/cmds-subvolume.c
index 4c9ca6a..ba57eaa 100644
--- a/cmds-subvolume.c
+++ b/cmds-subvolume.c
@@ -630,6 +630,7 @@ static int cmd_subvol_snapshot(int argc, char **argv)
char *dupdir = NULL;
char *newname;
char *dstdir;
+ enum btrfs_util_error err;
struct btrfs_ioctl_vol_args_v2 args;
struct btrfs_qgroup_inherit *inherit = NULL;
DIR *dirstream1 = NULL, *dirstream2 = NULL;
@@ -677,13 +678,9 @@ static int cmd_subvol_snapshot(int argc, char **argv)
dst = argv[optind + 1];
retval = 1; /* failure */
- res = test_issubvolume(subvol);
- if (res < 0) {
- error("cannot access subvolume %s: %s", subvol, strerror(-res));
- goto out;
- }
- if (!res) {
- error("not a subvolume: %s", subvol);
+ err = btrfs_util_is_subvolume(subvol);
+ if (err) {
+ error_btrfs_util(err);
goto out;
}
@@ -886,13 +883,9 @@ static int cmd_subvol_find_new(int argc, char **argv)
subvol = argv[optind];
last_gen = arg_strtou64(argv[optind + 1]);
- ret = test_issubvolume(subvol);
- if (ret < 0) {
- error("cannot access subvolume %s: %s", subvol, strerror(-ret));
- return 1;
- }
- if (!ret) {
- error("not a subvolume: %s", subvol);
+ err = btrfs_util_is_subvolume(subvol);
+ if (err) {
+ error_btrfs_util(err);
return 1;
}
diff --git a/utils.c b/utils.c
index 775af29..715bab0 100644
--- a/utils.c
+++ b/utils.c
@@ -40,6 +40,8 @@
#include <linux/magic.h>
#include <getopt.h>
+#include <btrfsutil.h>
+
#include "kerncompat.h"
#include "radix-tree.h"
#include "ctree.h"
@@ -1453,6 +1455,7 @@ u64 parse_qgroupid(const char *p)
char *s = strchr(p, '/');
const char *ptr_src_end = p + strlen(p);
char *ptr_parse_end = NULL;
+ enum btrfs_util_error err;
u64 level;
u64 id;
int fd;
@@ -1480,8 +1483,8 @@ u64 parse_qgroupid(const char *p)
path:
/* Path format like subv at 'my_subvol' is the fallback case */
- ret = test_issubvolume(p);
- if (ret < 0 || !ret)
+ err = btrfs_util_is_subvolume(p);
+ if (err)
goto err;
fd = open(p, O_RDONLY);
if (fd < 0)
@@ -2451,33 +2454,6 @@ int test_issubvolname(const char *name)
strcmp(name, ".") && strcmp(name, "..");
}
-/*
- * Test if path is a subvolume
- * Returns:
- * 0 - path exists but it is not a subvolume
- * 1 - path exists and it is a subvolume
- * < 0 - error
- */
-int test_issubvolume(const char *path)
-{
- struct stat st;
- struct statfs stfs;
- int res;
-
- res = stat(path, &st);
- if (res < 0)
- return -errno;
-
- if (st.st_ino != BTRFS_FIRST_FREE_OBJECTID || !S_ISDIR(st.st_mode))
- return 0;
-
- res = statfs(path, &stfs);
- if (res < 0)
- return -errno;
-
- return (int)stfs.f_type == BTRFS_SUPER_MAGIC;
-}
-
const char *subvol_strip_mountpoint(const char *mnt, const char *full_path)
{
int len = strlen(mnt);
diff --git a/utils.h b/utils.h
index eb460e9..403de48 100644
--- a/utils.h
+++ b/utils.h
@@ -149,7 +149,6 @@ u64 disk_size(const char *path);
u64 get_partition_size(const char *dev);
int test_issubvolname(const char *name);
-int test_issubvolume(const char *path);
int test_isdir(const char *path);
const char *subvol_strip_mountpoint(const char *mnt, const char *full_path);