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 <[email protected]> --- cmds-qgroup.c | 17 +++++++++++++--- qgroup.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++------------ qgroup.h | 2 ++ 3 files changed, 66 insertions(+), 15 deletions(-) diff --git a/cmds-qgroup.c b/cmds-qgroup.c index 912cc42..7ea752b 100644 --- a/cmds-qgroup.c +++ b/cmds-qgroup.c @@ -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); diff --git a/qgroup.c b/qgroup.c index 0de6c7d..b1b7cef 100644 --- a/qgroup.c +++ b/qgroup.c @@ -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) diff --git a/qgroup.h b/qgroup.h index 1113a24..aa05de5 100644 --- a/qgroup.h +++ b/qgroup.h @@ -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); -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
