@@ -204,6 +204,7 @@ static int cmd_qgroup_destroy(int argc, char **argv)
static const char * const cmd_qgroup_show_usage[] = {
"btrfs qgroup show [options] <path>",
"Show subvolume quota groups.",
+ "-h print size in human readable format",
"-p print parent qgroup id",
"-c print child qgroup id",
"-r print max referenced size of qgroup",
@@ -246,7 +247,7 @@ static int cmd_qgroup_show(int argc, char **argv)
optind = 1;
while (1) {
- c = getopt_long(argc, argv, "pcreFf",
+ c = getopt_long(argc, argv, "pcreFfh",
long_options, NULL);
if (c < 0)
break;
@@ -280,11 +281,21 @@ static int cmd_qgroup_show(int argc, char **argv)
usage(cmd_qgroup_show_usage);
break;
case 'B':
- block_size = parse_block_size(optarg);
- if (block_size < 0) {
+ ret = parse_block_size(optarg);
+ if (ret < 0) {
fprintf(stderr, "Invalid block size\n");
usage(cmd_qgroup_show_usage);
}
+ /* force to print in human readable format
+ * if -h is given
+ */
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ break;
+ else
+ block_size = ret;
+ break;
+ case 'h':
+ block_size = BTRFS_QGROUP_PRINT_HUMAN_READABLE;
break;
default:
usage(cmd_qgroup_show_usage);
@@ -206,15 +206,27 @@ static void print_qgroup_column(struct btrfs_qgroup *qgroup,
print_qgroup_column_add_blank(BTRFS_QGROUP_QGROUPID, len);
break;
case BTRFS_QGROUP_RFER:
- len = block_size_snprintf((signed long long)qgroup->rfer, tmp,
- sizeof(tmp), block_size);
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(
+ (signed long long)qgroup->rfer,
+ tmp, sizeof(tmp));
+ else
+ len = block_size_snprintf(
+ (signed long long)qgroup->rfer,
+ tmp, sizeof(tmp), block_size);
BUG_ON(len < 0);
printf("%s", tmp);
print_qgroup_column_add_blank(BTRFS_QGROUP_RFER, len);
break;
case BTRFS_QGROUP_EXCL:
- len = block_size_snprintf((signed long long)qgroup->excl, tmp,
- sizeof(tmp), block_size);
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(
+ (signed long long)qgroup->excl,
+ tmp, sizeof(tmp));
+ else
+ len = block_size_snprintf(
+ (signed long long)qgroup->excl,
+ tmp, sizeof(tmp), block_size);
BUG_ON(len < 0);
printf("%s", tmp);
print_qgroup_column_add_blank(BTRFS_QGROUP_EXCL, len);
@@ -224,14 +236,22 @@ static void print_qgroup_column(struct btrfs_qgroup *qgroup,
print_qgroup_column_add_blank(BTRFS_QGROUP_PARENT, len);
break;
case BTRFS_QGROUP_MAX_RFER:
- len = block_size_snprintf(qgroup->max_rfer, tmp,
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(qgroup->max_rfer, tmp,
+ sizeof(tmp));
+ else
+ len = block_size_snprintf(qgroup->max_rfer, tmp,
sizeof(tmp), block_size);
BUG_ON(len < 0);
printf("%s", tmp);
print_qgroup_column_add_blank(BTRFS_QGROUP_MAX_RFER, len);
break;
case BTRFS_QGROUP_MAX_EXCL:
- len = block_size_snprintf(qgroup->max_excl, tmp,
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(qgroup->max_excl, tmp,
+ sizeof(tmp));
+ else
+ len = block_size_snprintf(qgroup->max_excl, tmp,
sizeof(tmp), block_size);
BUG_ON(len < 0);
printf("%s", tmp);
@@ -917,28 +937,46 @@ static void __update_columns_max_len(struct btrfs_qgroup *bq,
btrfs_qgroup_columns[column].max_len = len;
break;
case BTRFS_QGROUP_RFER:
- len = block_size_snprintf((signed long long)bq->rfer, tmp,
- sizeof(tmp), block_size);
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(
+ (signed long long)bq->rfer,
+ tmp, sizeof(tmp));
+ else
+ len = block_size_snprintf((signed long long)bq->rfer,
+ tmp, sizeof(tmp), block_size);
BUG_ON(len < 0);
if (btrfs_qgroup_columns[column].max_len < len)
btrfs_qgroup_columns[column].max_len = len;
break;
case BTRFS_QGROUP_EXCL:
- len = block_size_snprintf((signed long long)bq->excl, tmp,
- sizeof(tmp), block_size);
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(
+ (signed long long)bq->excl,
+ tmp, sizeof(tmp));
+ else
+ len = block_size_snprintf((signed long long)bq->excl,
+ tmp, sizeof(tmp), block_size);
BUG_ON(len < 0);
if (btrfs_qgroup_columns[column].max_len < len)
btrfs_qgroup_columns[column].max_len = len;
break;
case BTRFS_QGROUP_MAX_RFER:
- len = block_size_snprintf(bq->max_rfer, tmp,
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(bq->max_rfer, tmp,
+ sizeof(tmp));
+ else
+ len = block_size_snprintf(bq->max_rfer, tmp,
sizeof(tmp), block_size);
BUG_ON(len < 0);
if (btrfs_qgroup_columns[column].max_len < len)
btrfs_qgroup_columns[column].max_len = len;
break;
case BTRFS_QGROUP_MAX_EXCL:
- len = block_size_snprintf(bq->max_excl, tmp,
+ if (block_size == BTRFS_QGROUP_PRINT_HUMAN_READABLE)
+ len = pretty_size_snprintf(bq->max_excl, tmp,
+ sizeof(tmp));
+ else
+ len = block_size_snprintf(bq->max_excl, tmp,
sizeof(tmp), block_size);
BUG_ON(len < 0);
if (btrfs_qgroup_columns[column].max_len < len)
@@ -22,6 +22,8 @@
#include "ioctl.h"
#include "kerncompat.h"
+#define BTRFS_QGROUP_PRINT_HUMAN_READABLE (-1)
+
struct btrfs_qgroup;
typedef int (*btrfs_qgroup_filter_func)(struct btrfs_qgroup *, u64);
This is a short cut for people who don't want to use '--block-size',it will print sizes in human readable format. Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com> --- cmds-qgroup.c | 17 +++++++++++++--- qgroup.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++------------ qgroup.h | 2 ++ 3 files changed, 66 insertions(+), 15 deletions(-)