diff --git a/cmds-balance.c b/cmds-balance.c index 2c5d2eb1..e73bfcf8 100644 --- a/cmds-balance.c +++ b/cmds-balance.c @@ -244,11 +244,30 @@ static int parse_filters(char *filters, struct btrfs_balance_args *args) "an argument\n"); return 1; } - if (parse_u64(value, &args->usage) || - args->usage > 100) { - fprintf(stderr, "Invalid usage argument: %s\n", - value); - return 1; + if (parse_u64(value, &args->usage)) { + if (parse_range_u32(value, &args->usage_min, + &args->usage_max)) { + fprintf(stderr, + "Invalid usage argument: %s\n", + value); + return 1; + } + if (args->usage_max > 100) { + fprintf(stderr, + "Invalid usage argument: %s\n", + value); + } + args->flags &= ~BTRFS_BALANCE_ARGS_USAGE; + args->flags |= BTRFS_BALANCE_ARGS_USAGE_RANGE; + } else { + if (args->usage > 100) { + fprintf(stderr, + "Invalid usage argument: %s\n", + value); + return 1; + } + args->flags &= ~BTRFS_BALANCE_ARGS_USAGE_RANGE; + args->flags |= BTRFS_BALANCE_ARGS_USAGE; } args->flags |= BTRFS_BALANCE_ARGS_USAGE; } else if (!strcmp(this_char, "devid")) {