Re: [PATCH] btrfs-progs: qgroup: show subvol path when qgroup show

2017-10-19 Thread David Sterba
On Wed, Oct 18, 2017 at 11:36:21AM +0800, Lu Fengqi wrote:
> >> @@ -1140,7 +1249,8 @@ static int __qgroups_search(int fd, struct 
> >> qgroup_lookup *qgroup_lookup)
> >>goto skip;
> >>add_qgroup(qgroup_lookup,
> >>   btrfs_search_header_offset(sh), 0,
> >> - 0, 0, 0, 0, 0, 0, 0, 0, 0, bq, bq1);
> >> + 0, 0, 0, 0, 0, 0, 0, 0, 0, bq, bq1,
> >> + NULL);
> >
> >Oh no, yet another argument, so it's 15 in total.
> 
> So many arguments are really hard to accept, I will rework this.

This could be done independent of this patch, but the cleaning up this
area is highly desired.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] btrfs-progs: qgroup: show subvol path when qgroup show

2017-10-17 Thread Lu Fengqi
On Mon, Oct 16, 2017 at 08:55:11PM +0200, David Sterba wrote:
>On Tue, Oct 10, 2017 at 04:37:09PM +0800, Lu Fengqi wrote:
>> Show the absolute subvol path for the associated level-0 qgroup.
>> 
>> Signed-off-by: Lu Fengqi 
>> ---
>>  Documentation/btrfs-qgroup.asciidoc |   2 +
>>  cmds-qgroup.c   |   7 +-
>>  qgroup.c| 130 
>> +---
>>  qgroup.h|   1 +
>>  4 files changed, 129 insertions(+), 11 deletions(-)
>> 
>> diff --git a/Documentation/btrfs-qgroup.asciidoc 
>> b/Documentation/btrfs-qgroup.asciidoc
>> index 3053f2e6..fb48a917 100644
>> --- a/Documentation/btrfs-qgroup.asciidoc
>> +++ b/Documentation/btrfs-qgroup.asciidoc
>> @@ -93,6 +93,8 @@ Show all qgroups in the btrfs filesystem identified by 
>> .
>>  print parent qgroup id.
>>  -c
>>  print child qgroup id.
>> +-P
>> +print subvol path.
>>  -r
>>  print limit of referenced size of qgroup.
>>  -e
>> diff --git a/cmds-qgroup.c b/cmds-qgroup.c
>> index 38382ea9..9dce84ae 100644
>> --- a/cmds-qgroup.c
>> +++ b/cmds-qgroup.c
>> @@ -277,6 +277,7 @@ static const char * const cmd_qgroup_show_usage[] = {
>>  "Show subvolume quota groups.",
>>  "-p print parent qgroup id",
>>  "-c print child qgroup id",
>> +"-P print subvol path",
>
>I think the path should be printed by default. A more intelligent way of
>specifying the columns is on the way, so I'd leave the path without an
>option. It's printed as a last item so hopefully will not break tools
>that parse the qgrou show output.

OK, I will update the patch so that print the path by default.

>
>>  "-r print limit of referenced size of qgroup",
>>  "-e print limit of exclusive size of qgroup",
>>  "-F list all qgroups which impact the given path",
>> @@ -322,7 +323,7 @@ static int cmd_qgroup_show(int argc, char **argv)
>>  { NULL, 0, NULL, 0 }
>>  };
>>  
>> -c = getopt_long(argc, argv, "pcreFf", long_options, NULL);
>> +c = getopt_long(argc, argv, "pcPreFf", long_options, NULL);
>>  if (c < 0)
>>  break;
>>  switch (c) {
>> @@ -334,6 +335,10 @@ static int cmd_qgroup_show(int argc, char **argv)
>>  btrfs_qgroup_setup_print_column(
>>  BTRFS_QGROUP_CHILD);
>>  break;
>> +case 'P':
>> +btrfs_qgroup_setup_print_column(
>> +BTRFS_QGROUP_PATH);
>> +break;
>>  case 'r':
>>  btrfs_qgroup_setup_print_column(
>>  BTRFS_QGROUP_MAX_RFER);
>> diff --git a/qgroup.c b/qgroup.c
>> index fffdbb12..d618107e 100644
>> --- a/qgroup.c
>> +++ b/qgroup.c
>> @@ -62,6 +62,9 @@ struct btrfs_qgroup {
>>  struct list_head qgroups;
>>  /*qgroups that are members of this group*/
>>  struct list_head members;
>> +
>> +/* level-0 qgroup's subvolume path */
>> +char *path;
>>  };
>>  
>>  /*
>> @@ -133,6 +136,13 @@ static struct {
>>  .unit_mode  = 0,
>>  .max_len= 5,
>>  },
>> +{
>> +.name   = "path",
>> +.column_name= "Path",
>> +.need_print = 0,
>> +.unit_mode  = 0,
>> +.max_len= 4,
>> +},
>>  {
>>  .name   = NULL,
>>  .column_name= NULL,
>> @@ -253,6 +263,9 @@ static void print_qgroup_column(struct btrfs_qgroup 
>> *qgroup,
>>  len = print_child_column(qgroup);
>>  print_qgroup_column_add_blank(BTRFS_QGROUP_CHILD, len);
>>  break;
>> +case BTRFS_QGROUP_PATH:
>> +len = printf("%s", qgroup->path ? qgroup->path : "---");
>> +print_qgroup_column_add_blank(BTRFS_QGROUP_PATH, len);
>>  default:
>>  break;
>>  }
>> @@ -267,7 +280,7 @@ static void print_single_qgroup_table(struct 
>> btrfs_qgroup *qgroup)
>>  continue;
>>  print_qgroup_column(qgroup, i);
>>  
>> -if (i != BTRFS_QGROUP_CHILD)
>> +if (i != BTRFS_QGROUP_ALL - 1)
>>  printf(" ");
>>  }
>>  printf("\n");
>> @@ -284,7 +297,7 @@ static void print_table_head(void)
>>  if (!btrfs_qgroup_columns[i].need_print)
>>  continue;
>>  if ((i == BTRFS_QGROUP_QGROUPID) | (i == BTRFS_QGROUP_PARENT) |
>> -(i == BTRFS_QGROUP_CHILD))
>> +(i == BTRFS_QGROUP_CHILD) | (i == BTRFS_QGROUP_PATH))
>>  printf("%-*s", max_len, btrfs_qgroup_columns[i].name);
>>  else
>>  printf("%*s", max_len, btrfs_qgroup_columns[i].name);
>> @@ -296,7 +309,7 @@ static void print_table_head(void)
>>   

Re: [PATCH] btrfs-progs: qgroup: show subvol path when qgroup show

2017-10-16 Thread David Sterba
On Tue, Oct 10, 2017 at 04:37:09PM +0800, Lu Fengqi wrote:
> Show the absolute subvol path for the associated level-0 qgroup.
> 
> Signed-off-by: Lu Fengqi 
> ---
>  Documentation/btrfs-qgroup.asciidoc |   2 +
>  cmds-qgroup.c   |   7 +-
>  qgroup.c| 130 
> +---
>  qgroup.h|   1 +
>  4 files changed, 129 insertions(+), 11 deletions(-)
> 
> diff --git a/Documentation/btrfs-qgroup.asciidoc 
> b/Documentation/btrfs-qgroup.asciidoc
> index 3053f2e6..fb48a917 100644
> --- a/Documentation/btrfs-qgroup.asciidoc
> +++ b/Documentation/btrfs-qgroup.asciidoc
> @@ -93,6 +93,8 @@ Show all qgroups in the btrfs filesystem identified by 
> .
>  print parent qgroup id.
>  -c
>  print child qgroup id.
> +-P
> +print subvol path.
>  -r
>  print limit of referenced size of qgroup.
>  -e
> diff --git a/cmds-qgroup.c b/cmds-qgroup.c
> index 38382ea9..9dce84ae 100644
> --- a/cmds-qgroup.c
> +++ b/cmds-qgroup.c
> @@ -277,6 +277,7 @@ static const char * const cmd_qgroup_show_usage[] = {
>   "Show subvolume quota groups.",
>   "-p print parent qgroup id",
>   "-c print child qgroup id",
> + "-P print subvol path",

I think the path should be printed by default. A more intelligent way of
specifying the columns is on the way, so I'd leave the path without an
option. It's printed as a last item so hopefully will not break tools
that parse the qgrou show output.

>   "-r print limit of referenced size of qgroup",
>   "-e print limit of exclusive size of qgroup",
>   "-F list all qgroups which impact the given path",
> @@ -322,7 +323,7 @@ static int cmd_qgroup_show(int argc, char **argv)
>   { NULL, 0, NULL, 0 }
>   };
>  
> - c = getopt_long(argc, argv, "pcreFf", long_options, NULL);
> + c = getopt_long(argc, argv, "pcPreFf", long_options, NULL);
>   if (c < 0)
>   break;
>   switch (c) {
> @@ -334,6 +335,10 @@ static int cmd_qgroup_show(int argc, char **argv)
>   btrfs_qgroup_setup_print_column(
>   BTRFS_QGROUP_CHILD);
>   break;
> + case 'P':
> + btrfs_qgroup_setup_print_column(
> + BTRFS_QGROUP_PATH);
> + break;
>   case 'r':
>   btrfs_qgroup_setup_print_column(
>   BTRFS_QGROUP_MAX_RFER);
> diff --git a/qgroup.c b/qgroup.c
> index fffdbb12..d618107e 100644
> --- a/qgroup.c
> +++ b/qgroup.c
> @@ -62,6 +62,9 @@ struct btrfs_qgroup {
>   struct list_head qgroups;
>   /*qgroups that are members of this group*/
>   struct list_head members;
> +
> + /* level-0 qgroup's subvolume path */
> + char *path;
>  };
>  
>  /*
> @@ -133,6 +136,13 @@ static struct {
>   .unit_mode  = 0,
>   .max_len= 5,
>   },
> + {
> + .name   = "path",
> + .column_name= "Path",
> + .need_print = 0,
> + .unit_mode  = 0,
> + .max_len= 4,
> + },
>   {
>   .name   = NULL,
>   .column_name= NULL,
> @@ -253,6 +263,9 @@ static void print_qgroup_column(struct btrfs_qgroup 
> *qgroup,
>   len = print_child_column(qgroup);
>   print_qgroup_column_add_blank(BTRFS_QGROUP_CHILD, len);
>   break;
> + case BTRFS_QGROUP_PATH:
> + len = printf("%s", qgroup->path ? qgroup->path : "---");
> + print_qgroup_column_add_blank(BTRFS_QGROUP_PATH, len);
>   default:
>   break;
>   }
> @@ -267,7 +280,7 @@ static void print_single_qgroup_table(struct btrfs_qgroup 
> *qgroup)
>   continue;
>   print_qgroup_column(qgroup, i);
>  
> - if (i != BTRFS_QGROUP_CHILD)
> + if (i != BTRFS_QGROUP_ALL - 1)
>   printf(" ");
>   }
>   printf("\n");
> @@ -284,7 +297,7 @@ static void print_table_head(void)
>   if (!btrfs_qgroup_columns[i].need_print)
>   continue;
>   if ((i == BTRFS_QGROUP_QGROUPID) | (i == BTRFS_QGROUP_PARENT) |
> - (i == BTRFS_QGROUP_CHILD))
> + (i == BTRFS_QGROUP_CHILD) | (i == BTRFS_QGROUP_PATH))
>   printf("%-*s", max_len, btrfs_qgroup_columns[i].name);
>   else
>   printf("%*s", max_len, btrfs_qgroup_columns[i].name);
> @@ -296,7 +309,7 @@ static void print_table_head(void)
>   if (!btrfs_qgroup_columns[i].need_print)
>   continue;
>   if ((i == BTRFS_QGROUP_QGROUPID) | (i == BTRFS_QGROUP_PARENT) |
> - (i 

[PATCH] btrfs-progs: qgroup: show subvol path when qgroup show

2017-10-10 Thread Lu Fengqi
Show the absolute subvol path for the associated level-0 qgroup.

Signed-off-by: Lu Fengqi 
---
 Documentation/btrfs-qgroup.asciidoc |   2 +
 cmds-qgroup.c   |   7 +-
 qgroup.c| 130 +---
 qgroup.h|   1 +
 4 files changed, 129 insertions(+), 11 deletions(-)

diff --git a/Documentation/btrfs-qgroup.asciidoc 
b/Documentation/btrfs-qgroup.asciidoc
index 3053f2e6..fb48a917 100644
--- a/Documentation/btrfs-qgroup.asciidoc
+++ b/Documentation/btrfs-qgroup.asciidoc
@@ -93,6 +93,8 @@ Show all qgroups in the btrfs filesystem identified by .
 print parent qgroup id.
 -c
 print child qgroup id.
+-P
+print subvol path.
 -r
 print limit of referenced size of qgroup.
 -e
diff --git a/cmds-qgroup.c b/cmds-qgroup.c
index 38382ea9..9dce84ae 100644
--- a/cmds-qgroup.c
+++ b/cmds-qgroup.c
@@ -277,6 +277,7 @@ static const char * const cmd_qgroup_show_usage[] = {
"Show subvolume quota groups.",
"-p print parent qgroup id",
"-c print child qgroup id",
+   "-P print subvol path",
"-r print limit of referenced size of qgroup",
"-e print limit of exclusive size of qgroup",
"-F list all qgroups which impact the given path",
@@ -322,7 +323,7 @@ static int cmd_qgroup_show(int argc, char **argv)
{ NULL, 0, NULL, 0 }
};
 
-   c = getopt_long(argc, argv, "pcreFf", long_options, NULL);
+   c = getopt_long(argc, argv, "pcPreFf", long_options, NULL);
if (c < 0)
break;
switch (c) {
@@ -334,6 +335,10 @@ static int cmd_qgroup_show(int argc, char **argv)
btrfs_qgroup_setup_print_column(
BTRFS_QGROUP_CHILD);
break;
+   case 'P':
+   btrfs_qgroup_setup_print_column(
+   BTRFS_QGROUP_PATH);
+   break;
case 'r':
btrfs_qgroup_setup_print_column(
BTRFS_QGROUP_MAX_RFER);
diff --git a/qgroup.c b/qgroup.c
index fffdbb12..d618107e 100644
--- a/qgroup.c
+++ b/qgroup.c
@@ -62,6 +62,9 @@ struct btrfs_qgroup {
struct list_head qgroups;
/*qgroups that are members of this group*/
struct list_head members;
+
+   /* level-0 qgroup's subvolume path */
+   char *path;
 };
 
 /*
@@ -133,6 +136,13 @@ static struct {
.unit_mode  = 0,
.max_len= 5,
},
+   {
+   .name   = "path",
+   .column_name= "Path",
+   .need_print = 0,
+   .unit_mode  = 0,
+   .max_len= 4,
+   },
{
.name   = NULL,
.column_name= NULL,
@@ -253,6 +263,9 @@ static void print_qgroup_column(struct btrfs_qgroup *qgroup,
len = print_child_column(qgroup);
print_qgroup_column_add_blank(BTRFS_QGROUP_CHILD, len);
break;
+   case BTRFS_QGROUP_PATH:
+   len = printf("%s", qgroup->path ? qgroup->path : "---");
+   print_qgroup_column_add_blank(BTRFS_QGROUP_PATH, len);
default:
break;
}
@@ -267,7 +280,7 @@ static void print_single_qgroup_table(struct btrfs_qgroup 
*qgroup)
continue;
print_qgroup_column(qgroup, i);
 
-   if (i != BTRFS_QGROUP_CHILD)
+   if (i != BTRFS_QGROUP_ALL - 1)
printf(" ");
}
printf("\n");
@@ -284,7 +297,7 @@ static void print_table_head(void)
if (!btrfs_qgroup_columns[i].need_print)
continue;
if ((i == BTRFS_QGROUP_QGROUPID) | (i == BTRFS_QGROUP_PARENT) |
-   (i == BTRFS_QGROUP_CHILD))
+   (i == BTRFS_QGROUP_CHILD) | (i == BTRFS_QGROUP_PATH))
printf("%-*s", max_len, btrfs_qgroup_columns[i].name);
else
printf("%*s", max_len, btrfs_qgroup_columns[i].name);
@@ -296,7 +309,7 @@ static void print_table_head(void)
if (!btrfs_qgroup_columns[i].need_print)
continue;
if ((i == BTRFS_QGROUP_QGROUPID) | (i == BTRFS_QGROUP_PARENT) |
-   (i == BTRFS_QGROUP_CHILD)) {
+   (i == BTRFS_QGROUP_CHILD) | (i == BTRFS_QGROUP_PATH)) {
len = strlen(btrfs_qgroup_columns[i].name);
while (len--)
printf("-");
@@ -627,7 +640,7 @@ static int add_qgroup(struct qgroup_lookup *qgroup_lookup, 
u64 qgroupid,
  u64 generation, u64 rfer, u64 rfer_cmpr,