From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: jeffm@suse.com, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 07/20] btrfs-progs: qgroups: introduce and use info and limit structures
Date: Thu, 8 Mar 2018 13:34:36 +0800 [thread overview]
Message-ID: <359c45b7-e183-9fa8-3ee2-27d30a93b1c3@gmx.com> (raw)
In-Reply-To: <20180308024047.10104-8-jeffm@suse.com>
[-- Attachment #1.1: Type: text/plain, Size: 8511 bytes --]
On 2018年03月08日 10:40, jeffm@suse.com wrote:
> From: Jeff Mahoney <jeffm@suse.com>
>
> We use structures to pass the info and limit from the kernel as items
> but store the individual values separately in btrfs_qgroup. We already
> have a btrfs_qgroup_limit structure that's used for setting the limit.
>
> This patch introduces a btrfs_qgroup_info structure and uses that and
> btrfs_qgroup_limit in btrfs_qgroup.
>
> Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Thanks,
Qu
> ---
> qgroup.c | 82 ++++++++++++++++++++++++++++++++++------------------------------
> qgroup.h | 8 +++++++
> 2 files changed, 52 insertions(+), 38 deletions(-)
>
> diff --git a/qgroup.c b/qgroup.c
> index 5600da99..57815718 100644
> --- a/qgroup.c
> +++ b/qgroup.c
> @@ -46,20 +46,12 @@ struct btrfs_qgroup {
> /*
> * info_item
> */
> - u64 generation;
> - u64 rfer; /*referenced*/
> - u64 rfer_cmpr; /*referenced compressed*/
> - u64 excl; /*exclusive*/
> - u64 excl_cmpr; /*exclusive compressed*/
> + struct btrfs_qgroup_info info;
>
> /*
> *limit_item
> */
> - u64 flags; /*which limits are set*/
> - u64 max_rfer;
> - u64 max_excl;
> - u64 rsv_rfer;
> - u64 rsv_excl;
> + struct btrfs_qgroup_limit limit;
>
> /*qgroups this group is member of*/
> struct list_head qgroups;
> @@ -260,6 +252,11 @@ void print_pathname_column(struct btrfs_qgroup *qgroup, bool verbose)
> fputs("<missing>", stdout);
> }
>
> +static int print_u64(u64 value, int unit_mode, int max_len)
> +{
> + return printf("%*s", max_len, pretty_size_mode(value, unit_mode));
> +}
> +
> static void print_qgroup_column(struct btrfs_qgroup *qgroup,
> enum btrfs_qgroup_column_enum column,
> bool verbose)
> @@ -279,24 +276,26 @@ 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("%*s", max_len, pretty_size_mode(qgroup->rfer, unit_mode));
> + len = print_u64(qgroup->info.referenced, unit_mode, max_len);
> break;
> case BTRFS_QGROUP_EXCL:
> - len = printf("%*s", max_len, pretty_size_mode(qgroup->excl, unit_mode));
> + len = print_u64(qgroup->info.exclusive, unit_mode, max_len);
> break;
> case BTRFS_QGROUP_PARENT:
> len = print_parent_column(qgroup);
> print_qgroup_column_add_blank(BTRFS_QGROUP_PARENT, len);
> break;
> case BTRFS_QGROUP_MAX_RFER:
> - if (qgroup->flags & BTRFS_QGROUP_LIMIT_MAX_RFER)
> - len = printf("%*s", max_len, pretty_size_mode(qgroup->max_rfer, unit_mode));
> + if (qgroup->limit.flags & BTRFS_QGROUP_LIMIT_MAX_RFER)
> + len = print_u64(qgroup->limit.max_referenced,
> + unit_mode, max_len);
> else
> len = printf("%*s", max_len, "none");
> break;
> case BTRFS_QGROUP_MAX_EXCL:
> - if (qgroup->flags & BTRFS_QGROUP_LIMIT_MAX_EXCL)
> - len = printf("%*s", max_len, pretty_size_mode(qgroup->max_excl, unit_mode));
> + if (qgroup->limit.flags & BTRFS_QGROUP_LIMIT_MAX_EXCL)
> + len = print_u64(qgroup->limit.max_exclusive,
> + unit_mode, max_len);
> else
> len = printf("%*s", max_len, "none");
> break;
> @@ -439,9 +438,9 @@ static int comp_entry_with_rfer(struct btrfs_qgroup *entry1,
> {
> int ret;
>
> - if (entry1->rfer > entry2->rfer)
> + if (entry1->info.referenced > entry2->info.referenced)
> ret = 1;
> - else if (entry1->rfer < entry2->rfer)
> + else if (entry1->info.referenced < entry2->info.referenced)
> ret = -1;
> else
> ret = 0;
> @@ -455,9 +454,9 @@ static int comp_entry_with_excl(struct btrfs_qgroup *entry1,
> {
> int ret;
>
> - if (entry1->excl > entry2->excl)
> + if (entry1->info.exclusive > entry2->info.exclusive)
> ret = 1;
> - else if (entry1->excl < entry2->excl)
> + else if (entry1->info.exclusive < entry2->info.exclusive)
> ret = -1;
> else
> ret = 0;
> @@ -471,9 +470,9 @@ static int comp_entry_with_max_rfer(struct btrfs_qgroup *entry1,
> {
> int ret;
>
> - if (entry1->max_rfer > entry2->max_rfer)
> + if (entry1->limit.max_referenced > entry2->limit.max_referenced)
> ret = 1;
> - else if (entry1->max_rfer < entry2->max_rfer)
> + else if (entry1->limit.max_referenced < entry2->limit.max_referenced)
> ret = -1;
> else
> ret = 0;
> @@ -487,9 +486,9 @@ static int comp_entry_with_max_excl(struct btrfs_qgroup *entry1,
> {
> int ret;
>
> - if (entry1->max_excl > entry2->max_excl)
> + if (entry1->limit.max_exclusive > entry2->limit.max_exclusive)
> ret = 1;
> - else if (entry1->max_excl < entry2->max_excl)
> + else if (entry1->limit.max_exclusive < entry2->limit.max_exclusive)
> ret = -1;
> else
> ret = 0;
> @@ -747,11 +746,13 @@ static int update_qgroup_info(int fd, struct qgroup_lookup *qgroup_lookup,
> if (IS_ERR_OR_NULL(bq))
> return PTR_ERR(bq);
>
> - bq->generation = btrfs_stack_qgroup_info_generation(info);
> - bq->rfer = btrfs_stack_qgroup_info_referenced(info);
> - bq->rfer_cmpr = btrfs_stack_qgroup_info_referenced_compressed(info);
> - bq->excl = btrfs_stack_qgroup_info_exclusive(info);
> - bq->excl_cmpr = btrfs_stack_qgroup_info_exclusive_compressed(info);
> + bq->info.generation = btrfs_stack_qgroup_info_generation(info);
> + bq->info.referenced = btrfs_stack_qgroup_info_referenced(info);
> + bq->info.referenced_compressed =
> + btrfs_stack_qgroup_info_referenced_compressed(info);
> + bq->info.exclusive = btrfs_stack_qgroup_info_exclusive(info);
> + bq->info.exclusive_compressed =
> + btrfs_stack_qgroup_info_exclusive_compressed(info);
>
> return 0;
> }
> @@ -766,11 +767,14 @@ static int update_qgroup_limit(int fd, struct qgroup_lookup *qgroup_lookup,
> if (IS_ERR_OR_NULL(bq))
> return PTR_ERR(bq);
>
> - bq->flags = btrfs_stack_qgroup_limit_flags(limit);
> - bq->max_rfer = btrfs_stack_qgroup_limit_max_referenced(limit);
> - bq->max_excl = btrfs_stack_qgroup_limit_max_exclusive(limit);
> - bq->rsv_rfer = btrfs_stack_qgroup_limit_rsv_referenced(limit);
> - bq->rsv_excl = btrfs_stack_qgroup_limit_rsv_exclusive(limit);
> + bq->limit.flags = btrfs_stack_qgroup_limit_flags(limit);
> + bq->limit.max_referenced =
> + btrfs_stack_qgroup_limit_max_referenced(limit);
> + bq->limit.max_exclusive =
> + btrfs_stack_qgroup_limit_max_exclusive(limit);
> + bq->limit.rsv_referenced =
> + btrfs_stack_qgroup_limit_rsv_referenced(limit);
> + bq->limit.rsv_exclusive = btrfs_stack_qgroup_limit_rsv_exclusive(limit);
>
> return 0;
> }
> @@ -1063,22 +1067,24 @@ static void __update_columns_max_len(struct btrfs_qgroup *bq,
> btrfs_qgroup_columns[column].max_len = len;
> break;
> case BTRFS_QGROUP_RFER:
> - len = strlen(pretty_size_mode(bq->rfer, unit_mode));
> + len = strlen(pretty_size_mode(bq->info.referenced, unit_mode));
> if (btrfs_qgroup_columns[column].max_len < len)
> btrfs_qgroup_columns[column].max_len = len;
> break;
> case BTRFS_QGROUP_EXCL:
> - len = strlen(pretty_size_mode(bq->excl, unit_mode));
> + len = strlen(pretty_size_mode(bq->info.exclusive, unit_mode));
> if (btrfs_qgroup_columns[column].max_len < len)
> btrfs_qgroup_columns[column].max_len = len;
> break;
> case BTRFS_QGROUP_MAX_RFER:
> - len = strlen(pretty_size_mode(bq->max_rfer, unit_mode));
> + len = strlen(pretty_size_mode(bq->limit.max_referenced,
> + unit_mode));
> if (btrfs_qgroup_columns[column].max_len < len)
> btrfs_qgroup_columns[column].max_len = len;
> break;
> case BTRFS_QGROUP_MAX_EXCL:
> - len = strlen(pretty_size_mode(bq->max_excl, unit_mode));
> + len = strlen(pretty_size_mode(bq->limit.max_exclusive,
> + unit_mode));
> if (btrfs_qgroup_columns[column].max_len < len)
> btrfs_qgroup_columns[column].max_len = len;
> break;
> diff --git a/qgroup.h b/qgroup.h
> index f7ab7de5..5e71349c 100644
> --- a/qgroup.h
> +++ b/qgroup.h
> @@ -79,6 +79,14 @@ enum btrfs_qgroup_filter_enum {
> BTRFS_QGROUP_FILTER_MAX,
> };
>
> +struct btrfs_qgroup_info {
> + u64 generation;
> + u64 referenced;
> + u64 referenced_compressed;
> + u64 exclusive;
> + u64 exclusive_compressed;
> +};
> +
> int btrfs_qgroup_parse_sort_string(const char *opt_arg,
> struct btrfs_qgroup_comparer_set **comps);
> int btrfs_show_qgroups(int fd, struct btrfs_qgroup_filter_set *,
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 520 bytes --]
next prev parent reply other threads:[~2018-03-08 5:34 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-08 2:40 [PATCH v2 00/20] btrfs-progs: qgroups usability jeffm
2018-03-08 2:40 ` [PATCH 01/20] btrfs-progs: quota: Add -W option to rescan to wait without starting rescan jeffm
2018-05-03 5:17 ` Qu Wenruo
2018-03-08 2:40 ` [PATCH 02/20] btrfs-progs: qgroups: fix misleading index check jeffm
2018-03-08 2:40 ` [PATCH 03/20] btrfs-progs: constify pathnames passed as arguments jeffm
2018-03-08 2:40 ` [PATCH 04/20] btrfs-progs: btrfs-list: add rb_entry helpers for root_info jeffm
2018-03-08 2:40 ` [PATCH 05/20] btrfs-progs: btrfs-list: add btrfs_cleanup_root_info jeffm
2018-03-08 2:40 ` [PATCH 06/20] btrfs-progs: qgroups: add pathname to show output jeffm
2018-03-08 5:33 ` Qu Wenruo
2018-03-08 14:25 ` Jeff Mahoney
2018-03-08 2:40 ` [PATCH 07/20] btrfs-progs: qgroups: introduce and use info and limit structures jeffm
2018-03-08 5:34 ` Qu Wenruo [this message]
2018-03-08 2:40 ` [PATCH 08/20] btrfs-progs: qgroups: introduce btrfs_qgroup_query jeffm
2018-03-08 5:54 ` Qu Wenruo
2018-03-08 15:21 ` Jeff Mahoney
2018-03-09 0:27 ` Qu Wenruo
2018-03-08 2:40 ` [PATCH 09/20] btrfs-progs: subvolume: add quota info to btrfs sub show jeffm
2018-03-08 2:40 ` [PATCH 10/20] btrfs-progs: help: convert ints used as bools to bool jeffm
2018-03-08 5:55 ` Qu Wenruo
2018-03-08 2:40 ` [PATCH 11/20] btrfs-progs: reorder placement of help declarations for send/receive jeffm
2018-03-08 2:40 ` [PATCH 12/20] btrfs-progs: filesystem balance: split out special handling jeffm
2018-03-08 2:40 ` [PATCH 13/20] btrfs-progs: use cmd_struct as command entry point jeffm
2018-03-12 3:11 ` Jeff Mahoney
2018-03-12 3:24 ` Jeff Mahoney
2018-03-08 2:40 ` [PATCH 14/20] btrfs-progs: pass cmd_struct to command callback function jeffm
2018-03-08 2:40 ` [PATCH 15/20] btrfs-progs: pass cmd_struct to clean_args_no_options{,_relaxed} jeffm
2018-03-08 2:40 ` [PATCH 16/20] btrfs-progs: pass cmd_struct to usage() jeffm
2018-03-08 2:40 ` [PATCH 17/20] btrfs-progs: add support for output formats jeffm
2018-03-08 2:40 ` [PATCH 18/20] btrfs-progs: add generic support for json output jeffm
2018-03-08 2:40 ` [PATCH 19/20] btrfs-progs: qgroups: add json output for usage command jeffm
2018-03-08 2:40 ` [PATCH 20/20] btrfs-progs: handle command groups directly for common case jeffm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=359c45b7-e183-9fa8-3ee2-27d30a93b1c3@gmx.com \
--to=quwenruo.btrfs@gmx.com \
--cc=jeffm@suse.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).