mirror of
https://github.com/kdave/btrfs-progs
synced 2025-05-02 16:07:56 +00:00
btrfs-progs: qgroups: introduce and use info and limit structures
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. Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
6645837afd
commit
1f36151dbc
82
qgroup.c
82
qgroup.c
@ -43,20 +43,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;
|
||||
@ -202,6 +194,11 @@ static int print_child_column(struct btrfs_qgroup *qgroup)
|
||||
return len;
|
||||
}
|
||||
|
||||
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_add_blank(enum btrfs_qgroup_column_enum column,
|
||||
int len)
|
||||
{
|
||||
@ -228,24 +225,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;
|
||||
@ -344,9 +343,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;
|
||||
@ -360,9 +359,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;
|
||||
@ -376,9 +375,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;
|
||||
@ -392,9 +391,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;
|
||||
@ -628,11 +627,13 @@ static int update_qgroup_info(struct qgroup_lookup *qgroup_lookup, u64 qgroupid,
|
||||
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;
|
||||
}
|
||||
@ -647,11 +648,14 @@ static int update_qgroup_limit(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;
|
||||
}
|
||||
@ -942,22 +946,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;
|
||||
|
8
qgroup.h
8
qgroup.h
@ -77,6 +77,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 *,
|
||||
|
Loading…
Reference in New Issue
Block a user