diff options
author | Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> | 2016-03-18 10:35:15 +0900 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-03-18 14:17:11 +0100 |
commit | 208ba29007c1c698d84a097afe6f85646516e282 (patch) | |
tree | d0677273fcf9fbf961e336916b09aa6dccc4f7f3 /cmds-qgroup.c | |
parent | f4f4fb206199651f7c7d51cab2832c386bf97a05 (diff) |
btrfs-progs: qgroup assign: can't handle options
"qgroup assign" is considered as working without any options
from the following commit.
commit 176aeca9a148 ("btrfs-progs: add getopt stubs where needed")
However, we can pass options to this command.
* actual result
==================================================
# ./btrfs qgroup assign --rescan 0/260 1/261 /btrfs
btrfs qgroup assign: unrecognized option '--rescan'
usage: btrfs qgroup assign [options] <src> <dst> <path>
Assign SRC as the child qgroup of DST
--rescan schedule qutoa rescan if needed
--no-rescan
==================================================
* expected result
==================================================
# ./btrfs qgroup assign --rescan 0/260 1/261 /btrfs
#
==================================================
Signed-off-by: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'cmds-qgroup.c')
-rw-r--r-- | cmds-qgroup.c | 64 |
1 files changed, 27 insertions, 37 deletions
diff --git a/cmds-qgroup.c b/cmds-qgroup.c index 7ae22535..45075a3b 100644 --- a/cmds-qgroup.c +++ b/cmds-qgroup.c @@ -32,7 +32,8 @@ static const char * const qgroup_cmd_group_usage[] = { NULL }; -static int _cmd_qgroup_assign(int assign, int argc, char **argv) +static int _cmd_qgroup_assign(int assign, int argc, char **argv, + const char * const *usage_str) { int ret = 0; int fd; @@ -41,28 +42,33 @@ static int _cmd_qgroup_assign(int assign, int argc, char **argv) struct btrfs_ioctl_qgroup_assign_args args; DIR *dirstream = NULL; - while (1) { - enum { GETOPT_VAL_RESCAN = 256 }; - static const struct option long_options[] = { - { "rescan", no_argument, NULL, GETOPT_VAL_RESCAN }, - { NULL, 0, NULL, 0 } - }; - int c = getopt_long(argc, argv, "", long_options, NULL); - - if (c < 0) - break; - switch (c) { - case GETOPT_VAL_RESCAN: - rescan = 1; - break; - default: - /* Usage printed by the caller */ - return -1; + if (assign) { + while (1) { + enum { GETOPT_VAL_RESCAN = 256 }; + static const struct option long_options[] = { + { "rescan", no_argument, NULL, + GETOPT_VAL_RESCAN }, + { NULL, 0, NULL, 0 } + }; + int c = getopt_long(argc, argv, "", long_options, NULL); + + if (c < 0) + break; + switch (c) { + case GETOPT_VAL_RESCAN: + rescan = 1; + break; + default: + /* Usage printed by the caller */ + return -1; + } } + } else { + clean_args_no_options(argc, argv, usage_str); } if (check_argc_exact(argc - optind, 3)) - return -1; + usage(usage_str); memset(&args, 0, sizeof(args)); args.assign = assign; @@ -208,15 +214,7 @@ static const char * const cmd_qgroup_assign_usage[] = { static int cmd_qgroup_assign(int argc, char **argv) { - int ret; - - clean_args_no_options(argc, argv, cmd_qgroup_assign_usage); - - ret = _cmd_qgroup_assign(1, argc, argv); - - if (ret < 0) - usage(cmd_qgroup_assign_usage); - return ret; + return _cmd_qgroup_assign(1, argc, argv, cmd_qgroup_assign_usage); } static const char * const cmd_qgroup_remove_usage[] = { @@ -227,15 +225,7 @@ static const char * const cmd_qgroup_remove_usage[] = { static int cmd_qgroup_remove(int argc, char **argv) { - int ret; - - clean_args_no_options(argc, argv, cmd_qgroup_remove_usage); - - ret = _cmd_qgroup_assign(0, argc, argv); - - if (ret < 0) - usage(cmd_qgroup_remove_usage); - return ret; + return _cmd_qgroup_assign(0, argc, argv, cmd_qgroup_remove_usage); } static const char * const cmd_qgroup_create_usage[] = { |