btrfs-progs: subvolume: add quota info to btrfs sub show
This patch reports on the first-level qgroup, if any, associated with a particular subvolume. It displays the usage and limit, subject to the usual unit parameters. Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
1ebfc031cb
commit
f114e65591
|
@ -918,6 +918,7 @@ static const char * const cmd_subvol_show_usage[] = {
|
||||||
"Show more information about the subvolume (UUIDs, generations, times, snapshots)",
|
"Show more information about the subvolume (UUIDs, generations, times, snapshots)",
|
||||||
"-r|--rootid rootid of the subvolume",
|
"-r|--rootid rootid of the subvolume",
|
||||||
"-u|--uuid uuid of the subvolume",
|
"-u|--uuid uuid of the subvolume",
|
||||||
|
HELPINFO_UNITS_SHORT_LONG,
|
||||||
"",
|
"",
|
||||||
"If no option is specified, subvolume at <path> will be shown, otherwise",
|
"If no option is specified, subvolume at <path> will be shown, otherwise",
|
||||||
"the rootid or uuid are resolved relative to the <path>.",
|
"the rootid or uuid are resolved relative to the <path>.",
|
||||||
|
@ -940,6 +941,13 @@ static int cmd_subvol_show(int argc, char **argv)
|
||||||
struct btrfs_util_subvolume_info subvol;
|
struct btrfs_util_subvolume_info subvol;
|
||||||
char *subvol_path = NULL;
|
char *subvol_path = NULL;
|
||||||
enum btrfs_util_error err;
|
enum btrfs_util_error err;
|
||||||
|
struct btrfs_qgroup_stats stats;
|
||||||
|
unsigned int unit_mode;
|
||||||
|
const char *referenced_size;
|
||||||
|
const char *referenced_limit_size = "-";
|
||||||
|
unsigned int field_width = 0;
|
||||||
|
|
||||||
|
unit_mode = get_unit_mode_from_arg(&argc, argv, 1);
|
||||||
|
|
||||||
optind = 0;
|
optind = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -1110,7 +1118,48 @@ static int cmd_subvol_show(int argc, char **argv)
|
||||||
}
|
}
|
||||||
btrfs_util_destroy_subvolume_iterator(iter);
|
btrfs_util_destroy_subvolume_iterator(iter);
|
||||||
|
|
||||||
ret = 0;
|
ret = btrfs_qgroup_query(fd, subvol.id, &stats);
|
||||||
|
if (ret && ret != -ENOTTY && ret != -ENODATA) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"\nERROR: BTRFS_IOC_QUOTA_QUERY failed: %s\n",
|
||||||
|
strerror(-ret));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\tQuota Usage:\t\t");
|
||||||
|
fflush(stdout);
|
||||||
|
if (ret) {
|
||||||
|
if (ret == -ENOTTY)
|
||||||
|
printf("quotas not enabled\n");
|
||||||
|
else
|
||||||
|
printf("quotas not available\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
referenced_size = pretty_size_mode(stats.info.referenced, unit_mode);
|
||||||
|
if (stats.limit.max_referenced)
|
||||||
|
referenced_limit_size = pretty_size_mode(
|
||||||
|
stats.limit.max_referenced,
|
||||||
|
unit_mode);
|
||||||
|
field_width = max(strlen(referenced_size),
|
||||||
|
strlen(referenced_limit_size));
|
||||||
|
|
||||||
|
printf("%-*s referenced, %s exclusive\n ", field_width,
|
||||||
|
referenced_size,
|
||||||
|
pretty_size_mode(stats.info.exclusive, unit_mode));
|
||||||
|
|
||||||
|
printf("\tQuota Limits:\t\t");
|
||||||
|
if (stats.limit.max_referenced || stats.limit.max_exclusive) {
|
||||||
|
const char *excl = "-";
|
||||||
|
|
||||||
|
if (stats.limit.max_exclusive)
|
||||||
|
excl = pretty_size_mode(stats.limit.max_exclusive,
|
||||||
|
unit_mode);
|
||||||
|
printf("%-*s referenced, %s exclusive\n", field_width,
|
||||||
|
referenced_limit_size, excl);
|
||||||
|
} else
|
||||||
|
printf("None\n");
|
||||||
|
|
||||||
out:
|
out:
|
||||||
free(subvol_path);
|
free(subvol_path);
|
||||||
close_file_or_dir(fd, dirstream1);
|
close_file_or_dir(fd, dirstream1);
|
||||||
|
|
Loading…
Reference in New Issue