linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] btrfs-progs: make btrfs qgroups show human readable sizes
@ 2015-01-09  6:47 Fan Chengniang
  2015-01-09 13:48 ` Christian Robottom Reis
  2015-01-09 18:03 ` David Sterba
  0 siblings, 2 replies; 5+ messages in thread
From: Fan Chengniang @ 2015-01-09  6:47 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Fan Chengniang

make btrfs qgroups show human readable sizes, using -h option, example:

qgroupid rfer         excl         max_rfer     max_excl     parent  child
-------- ----         ----         --------     --------     ------  -----
0/5      299.58MiB    299.58MiB    400.00MiB    0.00B        1/1     ---
0/265    299.58MiB    16.00KiB     0.00B        320.00MiB    1/1     ---
0/266    299.58MiB    16.00KiB     350.00MiB    0.00B        ---     ---
1/1      599.16MiB    299.59MiB    800.00MiB    0.00B        ---     0/5,0/265

Signed-off-by: Fan Chengniang <fancn.fnst@cn.fujitsu.com>
---
 Documentation/btrfs-qgroup.txt |  2 ++
 cmds-qgroup.c                  |  6 +++++-
 qgroup.c                       | 46 ++++++++++++++++++++++++++++++++++--------
 qgroup.h                       |  1 +
 4 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/Documentation/btrfs-qgroup.txt b/Documentation/btrfs-qgroup.txt
index 3e13373..6a3d649 100644
--- a/Documentation/btrfs-qgroup.txt
+++ b/Documentation/btrfs-qgroup.txt
@@ -69,6 +69,8 @@ print child qgroup id.
 print max referenced size of qgroup.
 -e::::
 print max exclusive size of qgroup.
+-h::::
+print sizes in human readable format (e.g., 1KiB 234MiB 2GiB).
 -F::::
 list all qgroups which impact the given path(include ancestral qgroups)
 -f::::
diff --git a/cmds-qgroup.c b/cmds-qgroup.c
index 957fbc9..c2bd0a3 100644
--- a/cmds-qgroup.c
+++ b/cmds-qgroup.c
@@ -212,6 +212,7 @@ static const char * const cmd_qgroup_show_usage[] = {
 	"-c		print child qgroup id",
 	"-r		print max referenced size of qgroup",
 	"-e		print max exclusive size of qgroup",
+	"-h		print sizes in human readable format (e.g., 1KiB 234MiB 2GiB)",
 	"-F		list all qgroups which impact the given path"
 	"(include ancestral qgroups)",
 	"-f		list all qgroups which impact the given path"
@@ -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, "pcrehFf",
 				long_options, NULL);
 		if (c < 0)
 			break;
@@ -267,6 +268,9 @@ static int cmd_qgroup_show(int argc, char **argv)
 			btrfs_qgroup_setup_print_column(
 				BTRFS_QGROUP_MAX_EXCL);
 			break;
+		case 'h':
+			btrfs_qgroup_setup_human_readable();
+			break;
 		case 'F':
 			filter_flag |= 0x1;
 			break;
diff --git a/qgroup.c b/qgroup.c
index 1a4866c..5cb239e 100644
--- a/qgroup.c
+++ b/qgroup.c
@@ -20,6 +20,7 @@
 #include <sys/ioctl.h>
 #include "ctree.h"
 #include "ioctl.h"
+#include "utils.h"
 
 #define BTRFS_QGROUP_NFILTERS_INCREASE (2 * BTRFS_QGROUP_FILTER_MAX)
 #define BTRFS_QGROUP_NCOMPS_INCREASE (2 * BTRFS_QGROUP_COMP_MAX)
@@ -80,53 +81,62 @@ static struct {
 	char *name;
 	char *column_name;
 	int need_print;
+	int human_readable;
 	int max_len;
 } btrfs_qgroup_columns[] = {
 	{
 		.name		= "qgroupid",
 		.column_name	= "Qgroupid",
 		.need_print	= 1,
+		.human_readable = 0,
 		.max_len	= 8,
 	},
 	{
 		.name		= "rfer",
 		.column_name	= "Rfer",
 		.need_print	= 1,
-		.max_len	= 4,
+		.human_readable = 0,
+		.max_len	= 12,
 	},
 	{
 		.name		= "excl",
 		.column_name	= "Excl",
 		.need_print	= 1,
-		.max_len	= 4,
+		.human_readable = 0,
+		.max_len	= 12,
 	},
 	{	.name		= "max_rfer",
 		.column_name	= "Max_rfer",
 		.need_print	= 0,
-		.max_len	= 8,
+		.human_readable = 0,
+		.max_len	= 12,
 	},
 	{
 		.name		= "max_excl",
 		.column_name	= "Max_excl",
 		.need_print	= 0,
-		.max_len	= 8,
+		.human_readable = 0,
+		.max_len	= 12,
 	},
 	{
 		.name		= "parent",
 		.column_name	= "Parent",
 		.need_print	= 0,
+		.human_readable = 0,
 		.max_len	= 7,
 	},
 	{
 		.name		= "child",
 		.column_name	= "Child",
 		.need_print	= 0,
+		.human_readable = 0,
 		.max_len	= 5,
 	},
 	{
 		.name		= NULL,
 		.column_name	= NULL,
 		.need_print	= 0,
+		.human_readable = 0,
 	},
 };
 
@@ -147,6 +157,14 @@ void btrfs_qgroup_setup_print_column(enum btrfs_qgroup_column_enum column)
 		btrfs_qgroup_columns[i].need_print = 1;
 }
 
+void btrfs_qgroup_setup_human_readable(void)
+{
+	btrfs_qgroup_columns[BTRFS_QGROUP_RFER].human_readable = 1;
+	btrfs_qgroup_columns[BTRFS_QGROUP_EXCL].human_readable = 1;
+	btrfs_qgroup_columns[BTRFS_QGROUP_MAX_RFER].human_readable = 1;
+	btrfs_qgroup_columns[BTRFS_QGROUP_MAX_EXCL].human_readable = 1;
+}
+
 static int print_parent_column(struct btrfs_qgroup *qgroup)
 {
 	struct btrfs_qgroup_list *list = NULL;
@@ -203,11 +221,17 @@ static void print_qgroup_column(struct btrfs_qgroup *qgroup,
 		print_qgroup_column_add_blank(BTRFS_QGROUP_QGROUPID, len);
 		break;
 	case BTRFS_QGROUP_RFER:
-		len = printf("%llu", qgroup->rfer);
+		if (btrfs_qgroup_columns[column].human_readable)
+			len = printf("%s", pretty_size(qgroup->rfer));
+		else
+			len = printf("%llu", qgroup->rfer);
 		print_qgroup_column_add_blank(BTRFS_QGROUP_RFER, len);
 		break;
 	case BTRFS_QGROUP_EXCL:
-		len = printf("%llu", qgroup->excl);
+		if (btrfs_qgroup_columns[column].human_readable)
+			len = printf("%s", pretty_size(qgroup->excl));
+		else
+			len = printf("%llu", qgroup->excl);
 		print_qgroup_column_add_blank(BTRFS_QGROUP_EXCL, len);
 		break;
 	case BTRFS_QGROUP_PARENT:
@@ -215,11 +239,17 @@ 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 = printf("%llu", qgroup->max_rfer);
+		if (btrfs_qgroup_columns[column].human_readable)
+			len = printf("%s", pretty_size(qgroup->max_rfer));
+		else
+			len = printf("%llu", qgroup->max_rfer);
 		print_qgroup_column_add_blank(BTRFS_QGROUP_MAX_RFER, len);
 		break;
 	case BTRFS_QGROUP_MAX_EXCL:
-		len = printf("%llu", qgroup->max_excl);
+		if (btrfs_qgroup_columns[column].human_readable)
+			len = printf("%s", pretty_size(qgroup->max_excl));
+		else
+			len = printf("%llu", qgroup->max_excl);
 		print_qgroup_column_add_blank(BTRFS_QGROUP_MAX_EXCL, len);
 		break;
 	case BTRFS_QGROUP_CHILD:
diff --git a/qgroup.h b/qgroup.h
index 653cf1c..cc8ae29 100644
--- a/qgroup.h
+++ b/qgroup.h
@@ -83,6 +83,7 @@ u64 btrfs_get_path_rootid(int fd);
 int btrfs_show_qgroups(int fd, struct btrfs_qgroup_filter_set *,
 		       struct btrfs_qgroup_comparer_set *);
 void btrfs_qgroup_setup_print_column(enum btrfs_qgroup_column_enum column);
+void btrfs_qgroup_setup_human_readable(void);
 struct btrfs_qgroup_filter_set *btrfs_qgroup_alloc_filter_set(void);
 void btrfs_qgroup_free_filter_set(struct btrfs_qgroup_filter_set *filter_set);
 int btrfs_qgroup_setup_filter(struct btrfs_qgroup_filter_set **filter_set,
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-01-12  3:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-09  6:47 [PATCH] btrfs-progs: make btrfs qgroups show human readable sizes Fan Chengniang
2015-01-09 13:48 ` Christian Robottom Reis
2015-01-09 17:58   ` David Sterba
2015-01-09 18:03 ` David Sterba
2015-01-12  3:00   ` Fan Chengniang/樊成酿

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).