diff options
author | Chris Mason <chris.mason@fusionio.com> | 2013-02-06 12:42:24 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2013-02-06 12:42:24 -0500 |
commit | 7b1c567c84a6292c138db3bd1638e19e73e0e593 (patch) | |
tree | 9ab6983c6fa2cbb837e9b782d1020899e0d2d846 /cmds-qgroup.c | |
parent | 5ffe6597e708d74c02d72d79ebb4a8fd2181e227 (diff) | |
parent | 2161e1b6f35d1c084fda49b479951219117c86e9 (diff) |
Merge branch 'for-chris' of git://repo.or.cz/btrfs-progs-unstable/devel into raid56
Conflicts:
ctree.h
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'cmds-qgroup.c')
-rw-r--r-- | cmds-qgroup.c | 34 |
1 files changed, 10 insertions, 24 deletions
diff --git a/cmds-qgroup.c b/cmds-qgroup.c index 1525c116..085881f3 100644 --- a/cmds-qgroup.c +++ b/cmds-qgroup.c @@ -24,26 +24,14 @@ #include "ioctl.h" #include "commands.h" +#include "qgroup.h" +#include "utils.h" static const char * const qgroup_cmd_group_usage[] = { "btrfs qgroup <command> [options] <path>", NULL }; -static u64 parse_qgroupid(char *p) -{ - char *s = strchr(p, '/'); - u64 level; - u64 id; - - if (!s) - return atoll(p); - level = atoll(p); - id = atoll(s + 1); - - return (level << 48) | id; -} - static int qgroup_assign(int assign, int argc, char **argv) { int ret = 0; @@ -63,7 +51,7 @@ static int qgroup_assign(int assign, int argc, char **argv) /* * FIXME src should accept subvol path */ - if (args.src >= args.dst) { + if ((args.src >> 48) >= (args.dst >> 48)) { fprintf(stderr, "ERROR: bad relation requested '%s'\n", path); return 12; } @@ -351,7 +339,7 @@ static int cmd_qgroup_limit(int argc, char **argv) int ret = 0; int fd; int e; - char *path; + char *path = NULL; struct btrfs_ioctl_qgroup_limit_args args; unsigned long long size; int compressed = 0; @@ -383,7 +371,6 @@ static int cmd_qgroup_limit(int argc, char **argv) } memset(&args, 0, sizeof(args)); - args.qgroupid = parse_qgroupid(argv[optind + 1]); if (size) { if (compressed) args.lim.flags |= BTRFS_QGROUP_LIMIT_RFER_CMPR | @@ -397,9 +384,8 @@ static int cmd_qgroup_limit(int argc, char **argv) } } - if (args.qgroupid == 0) { - if (check_argc_exact(argc - optind, 2)) - usage(cmd_qgroup_limit_usage); + if (argc - optind == 2) { + args.qgroupid = 0; path = argv[optind + 1]; ret = test_issubvolume(path); if (ret < 0) { @@ -415,11 +401,11 @@ static int cmd_qgroup_limit(int argc, char **argv) * keep qgroupid at 0, this indicates that the subvolume the * fd refers to is to be limited */ - } else { - if (check_argc_exact(argc - optind, 3)) - usage(cmd_qgroup_limit_usage); + } else if (argc - optind == 3) { + args.qgroupid = parse_qgroupid(argv[optind + 1]); path = argv[optind + 2]; - } + } else + usage(cmd_qgroup_limit_usage); fd = open_file_or_dir(path); if (fd < 0) { |