[PATCH 2/5] xfs_quota: create fs_disk_quota_t on upper level

Andrey Albershteyn
2022-03-28T22:27:12Z

For further splitting of get_quota() and dump_file()/report_mount().

Signed-off-by: Andrey Albershteyn <aalbersh@redhat.com>
---
quota/report.c | 165 +++++++++++++++++++++++++------------------------
1 file changed, 84 insertions(+), 81 deletions(-)

diff --git a/quota/report.c b/quota/report.c
index 97a89a92..0462ce97 100644
--- a/quota/report.c
+++ b/quota/report.c
@@ -96,39 +96,38 @@ get_quota(
static int
dump_file(
FILE *fp,
+ fs_disk_quota_t *d,
uint id,
uint *oid,
uint type,
char *dev,
int flags)
{
- fs_disk_quota_t d;
-
- if (!get_quota(&d, id, oid, type, dev, flags))
+ if (!get_quota(d, id, oid, type, dev, flags))
return 0;

- if (!d.d_blk_softlimit && !d.d_blk_hardlimit &&
- !d.d_ino_softlimit && !d.d_ino_hardlimit &&
- !d.d_rtb_softlimit && !d.d_rtb_hardlimit)
+ if (!d->d_blk_softlimit && !d->d_blk_hardlimit &&
+ !d->d_ino_softlimit && !d->d_ino_hardlimit &&
+ !d->d_rtb_softlimit && !d->d_rtb_hardlimit)
return 1;
fprintf(fp, "fs = %s\n", dev);
/* this branch is for backward compatibility reasons */
- if (d.d_rtb_softlimit || d.d_rtb_hardlimit)
+ if (d->d_rtb_softlimit || d->d_rtb_hardlimit)
fprintf(fp, "%-10d %7llu %7llu %7llu %7llu %7llu %7llu\n",
- d.d_id,
- (unsigned long long)d.d_blk_softlimit,
- (unsigned long long)d.d_blk_hardlimit,
- (unsigned long long)d.d_ino_softlimit,
- (unsigned long long)d.d_ino_hardlimit,
- (unsigned long long)d.d_rtb_softlimit,
- (unsigned long long)d.d_rtb_hardlimit);
+ d->d_id,
+ (unsigned long long)d->d_blk_softlimit,
+ (unsigned long long)d->d_blk_hardlimit,
+ (unsigned long long)d->d_ino_softlimit,
+ (unsigned long long)d->d_ino_hardlimit,
+ (unsigned long long)d->d_rtb_softlimit,
+ (unsigned long long)d->d_rtb_hardlimit);
else
fprintf(fp, "%-10d %7llu %7llu %7llu %7llu\n",
- d.d_id,
- (unsigned long long)d.d_blk_softlimit,
- (unsigned long long)d.d_blk_hardlimit,
- (unsigned long long)d.d_ino_softlimit,
- (unsigned long long)d.d_ino_hardlimit);
+ d->d_id,
+ (unsigned long long)d->d_blk_softlimit,
+ (unsigned long long)d->d_blk_hardlimit,
+ (unsigned long long)d->d_ino_softlimit,
+ (unsigned long long)d->d_ino_hardlimit);

return 1;
}
@@ -142,6 +141,7 @@ dump_limits_any_type(
uint upper)
{
fs_path_t *mount;
+ fs_disk_quota_t d;
uint id = 0, oid;

if ((mount = fs_table_lookup(dir, FS_MOUNT_POINT)) == NULL) {
@@ -154,14 +154,14 @@ dump_limits_any_type(
/* Range was specified; query everything in it */
if (upper) {
for (id = lower; id <= upper; id++)
- dump_file(fp, id, NULL, type, mount->fs_name, 0);
+ dump_file(fp, &d, id, NULL, type, mount->fs_name, 0);
return;
}

/* Use GETNEXTQUOTA if it's available */
- if (dump_file(fp, id, &oid, type, mount->fs_name, GETNEXTQUOTA_FLAG)) {
+ if (dump_file(fp, &d, id, &oid, type, mount->fs_name, GETNEXTQUOTA_FLAG)) {
id = oid + 1;
- while (dump_file(fp, id, &oid, type, mount->fs_name,
+ while (dump_file(fp, &d, id, &oid, type, mount->fs_name,
GETNEXTQUOTA_FLAG))
id = oid + 1;
return;
@@ -173,7 +173,7 @@ dump_limits_any_type(
struct group *g;
setgrent();
while ((g = getgrent()) != NULL)
- dump_file(fp, g->gr_gid, NULL, type,
+ dump_file(fp, &d, g->gr_gid, NULL, type,
mount->fs_name, 0);
endgrent();
break;
@@ -182,7 +182,7 @@ dump_limits_any_type(
struct fs_project *p;
setprent();
while ((p = getprent()) != NULL)
- dump_file(fp, p->pr_prid, NULL, type,
+ dump_file(fp, &d, p->pr_prid, NULL, type,
mount->fs_name, 0);
endprent();
break;
@@ -191,7 +191,7 @@ dump_limits_any_type(
struct passwd *u;
setpwent();
while ((u = getpwent()) != NULL)
- dump_file(fp, u->pw_uid, NULL, type,
+ dump_file(fp, &d, u->pw_uid, NULL, type,
mount->fs_name, 0);
endpwent();
break;
@@ -335,6 +335,7 @@ report_header(
static int
report_mount(
FILE *fp,
+ fs_disk_quota_t *d,
uint32_t id,
char *name,
uint32_t *oid,
@@ -343,22 +344,21 @@ report_mount(
fs_path_t *mount,
uint flags)
{
- fs_disk_quota_t d;
time64_t timer;
char c[8], h[8], s[8];
uint qflags;
int count;

- if (!get_quota(&d, id, oid, type, mount->fs_name, flags))
+ if (!get_quota(d, id, oid, type, mount->fs_name, flags))
return 0;

if (flags & TERSE_FLAG) {
count = 0;
- if ((form & XFS_BLOCK_QUOTA) && d.d_bcount)
+ if ((form & XFS_BLOCK_QUOTA) && d->d_bcount)
count++;
- if ((form & XFS_INODE_QUOTA) && d.d_icount)
+ if ((form & XFS_INODE_QUOTA) && d->d_icount)
count++;
- if ((form & XFS_RTBLOCK_QUOTA) && d.d_rtbcount)
+ if ((form & XFS_RTBLOCK_QUOTA) && d->d_rtbcount)
count++;
if (!count)
return 0;
@@ -368,19 +368,19 @@ report_mount(
report_header(fp, form, type, mount, flags);

if (flags & NO_LOOKUP_FLAG) {
- fprintf(fp, "#%-10u", d.d_id);
+ fprintf(fp, "#%-10u", d->d_id);
} else {
if (name == NULL) {
if (type == XFS_USER_QUOTA) {
- struct passwd *u = getpwuid(d.d_id);
+ struct passwd *u = getpwuid(d->d_id);
if (u)
name = u->pw_name;
} else if (type == XFS_GROUP_QUOTA) {
- struct group *g = getgrgid(d.d_id);
+ struct group *g = getgrgid(d->d_id);
if (g)
name = g->gr_name;
} else if (type == XFS_PROJ_QUOTA) {
- fs_project_t *p = getprprid(d.d_id);
+ fs_project_t *p = getprprid(d->d_id);
if (p)
name = p->pr_name;
}
@@ -389,73 +389,73 @@ report_mount(
if (name != NULL)
fprintf(fp, "%-10s", name);
else
- fprintf(fp, "#%-9u", d.d_id);
+ fprintf(fp, "#%-9u", d->d_id);
}

if (form & XFS_BLOCK_QUOTA) {
- timer = decode_timer(&d, d.d_btimer, d.d_btimer_hi);
+ timer = decode_timer(d, d->d_btimer, d->d_btimer_hi);
qflags = (flags & HUMAN_FLAG);
- if (d.d_blk_hardlimit && d.d_bcount > d.d_blk_hardlimit)
+ if (d->d_blk_hardlimit && d->d_bcount > d->d_blk_hardlimit)
qflags |= LIMIT_FLAG;
- if (d.d_blk_softlimit && d.d_bcount > d.d_blk_softlimit)
+ if (d->d_blk_softlimit && d->d_bcount > d->d_blk_softlimit)
qflags |= QUOTA_FLAG;
if (flags & HUMAN_FLAG)
fprintf(fp, " %6s %6s %6s %02d %8s",
- bbs_to_string(d.d_bcount, c, sizeof(c)),
- bbs_to_string(d.d_blk_softlimit, s, sizeof(s)),
- bbs_to_string(d.d_blk_hardlimit, h, sizeof(h)),
- d.d_bwarns,
+ bbs_to_string(d->d_bcount, c, sizeof(c)),
+ bbs_to_string(d->d_blk_softlimit, s, sizeof(s)),
+ bbs_to_string(d->d_blk_hardlimit, h, sizeof(h)),
+ d->d_bwarns,
time_to_string(timer, qflags));
else
fprintf(fp, " %10llu %10llu %10llu %02d %9s",
- (unsigned long long)d.d_bcount >> 1,
- (unsigned long long)d.d_blk_softlimit >> 1,
- (unsigned long long)d.d_blk_hardlimit >> 1,
- d.d_bwarns,
+ (unsigned long long)d->d_bcount >> 1,
+ (unsigned long long)d->d_blk_softlimit >> 1,
+ (unsigned long long)d->d_blk_hardlimit >> 1,
+ d->d_bwarns,
time_to_string(timer, qflags));
}
if (form & XFS_INODE_QUOTA) {
- timer = decode_timer(&d, d.d_itimer, d.d_itimer_hi);
+ timer = decode_timer(d, d->d_itimer, d->d_itimer_hi);
qflags = (flags & HUMAN_FLAG);
- if (d.d_ino_hardlimit && d.d_icount > d.d_ino_hardlimit)
+ if (d->d_ino_hardlimit && d->d_icount > d->d_ino_hardlimit)
qflags |= LIMIT_FLAG;
- if (d.d_ino_softlimit && d.d_icount > d.d_ino_softlimit)
+ if (d->d_ino_softlimit && d->d_icount > d->d_ino_softlimit)
qflags |= QUOTA_FLAG;
if (flags & HUMAN_FLAG)
fprintf(fp, " %6s %6s %6s %02d %8s",
- num_to_string(d.d_icount, c, sizeof(c)),
- num_to_string(d.d_ino_softlimit, s, sizeof(s)),
- num_to_string(d.d_ino_hardlimit, h, sizeof(h)),
- d.d_iwarns,
+ num_to_string(d->d_icount, c, sizeof(c)),
+ num_to_string(d->d_ino_softlimit, s, sizeof(s)),
+ num_to_string(d->d_ino_hardlimit, h, sizeof(h)),
+ d->d_iwarns,
time_to_string(timer, qflags));
else
fprintf(fp, " %10llu %10llu %10llu %02d %9s",
- (unsigned long long)d.d_icount,
- (unsigned long long)d.d_ino_softlimit,
- (unsigned long long)d.d_ino_hardlimit,
- d.d_iwarns,
+ (unsigned long long)d->d_icount,
+ (unsigned long long)d->d_ino_softlimit,
+ (unsigned long long)d->d_ino_hardlimit,
+ d->d_iwarns,
time_to_string(timer, qflags));
}
if (form & XFS_RTBLOCK_QUOTA) {
- timer = decode_timer(&d, d.d_rtbtimer, d.d_rtbtimer_hi);
+ timer = decode_timer(d, d->d_rtbtimer, d->d_rtbtimer_hi);
qflags = (flags & HUMAN_FLAG);
- if (d.d_rtb_hardlimit && d.d_rtbcount > d.d_rtb_hardlimit)
+ if (d->d_rtb_hardlimit && d->d_rtbcount > d->d_rtb_hardlimit)
qflags |= LIMIT_FLAG;
- if (d.d_rtb_softlimit && d.d_rtbcount > d.d_rtb_softlimit)
+ if (d->d_rtb_softlimit && d->d_rtbcount > d->d_rtb_softlimit)
qflags |= QUOTA_FLAG;
if (flags & HUMAN_FLAG)
fprintf(fp, " %6s %6s %6s %02d %8s",
- bbs_to_string(d.d_rtbcount, c, sizeof(c)),
- bbs_to_string(d.d_rtb_softlimit, s, sizeof(s)),
- bbs_to_string(d.d_rtb_hardlimit, h, sizeof(h)),
- d.d_rtbwarns,
+ bbs_to_string(d->d_rtbcount, c, sizeof(c)),
+ bbs_to_string(d->d_rtb_softlimit, s, sizeof(s)),
+ bbs_to_string(d->d_rtb_hardlimit, h, sizeof(h)),
+ d->d_rtbwarns,
time_to_string(timer, qflags));
else
fprintf(fp, " %10llu %10llu %10llu %02d %9s",
- (unsigned long long)d.d_rtbcount >> 1,
- (unsigned long long)d.d_rtb_softlimit >> 1,
- (unsigned long long)d.d_rtb_hardlimit >> 1,
- d.d_rtbwarns,
+ (unsigned long long)d->d_rtbcount >> 1,
+ (unsigned long long)d->d_rtb_softlimit >> 1,
+ (unsigned long long)d->d_rtb_hardlimit >> 1,
+ d->d_rtbwarns,
time_to_string(timer, qflags));
}
fputc('\n', fp);
@@ -472,28 +472,29 @@ report_user_mount(
uint flags)
{
struct passwd *u;
+ fs_disk_quota_t d;
uint id = 0, oid;

if (upper) { /* identifier range specified */
for (id = lower; id <= upper; id++) {
- if (report_mount(fp, id, NULL, NULL,
+ if (report_mount(fp, &d, id, NULL, NULL,
form, XFS_USER_QUOTA, mount, flags))
flags |= NO_HEADER_FLAG;
}
- } else if (report_mount(fp, id, NULL, &oid, form,
+ } else if (report_mount(fp, &d, id, NULL, &oid, form,
XFS_USER_QUOTA, mount,
flags|GETNEXTQUOTA_FLAG)) {
id = oid + 1;
flags |= GETNEXTQUOTA_FLAG;
flags |= NO_HEADER_FLAG;
- while (report_mount(fp, id, NULL, &oid, form, XFS_USER_QUOTA,
+ while (report_mount(fp, &d, id, NULL, &oid, form, XFS_USER_QUOTA,
mount, flags)) {
id = oid + 1;
}
} else {
setpwent();
while ((u = getpwent()) != NULL) {
- if (report_mount(fp, u->pw_uid, u->pw_name, NULL,
+ if (report_mount(fp, &d, u->pw_uid, u->pw_name, NULL,
form, XFS_USER_QUOTA, mount, flags))
flags |= NO_HEADER_FLAG;
}
@@ -514,28 +515,29 @@ report_group_mount(
uint flags)
{
struct group *g;
+ fs_disk_quota_t d;
uint id = 0, oid;

if (upper) { /* identifier range specified */
for (id = lower; id <= upper; id++) {
- if (report_mount(fp, id, NULL, NULL,
+ if (report_mount(fp, &d, id, NULL, NULL,
form, XFS_GROUP_QUOTA, mount, flags))
flags |= NO_HEADER_FLAG;
}
- } else if (report_mount(fp, id, NULL, &oid, form,
+ } else if (report_mount(fp, &d, id, NULL, &oid, form,
XFS_GROUP_QUOTA, mount,
flags|GETNEXTQUOTA_FLAG)) {
id = oid + 1;
flags |= GETNEXTQUOTA_FLAG;
flags |= NO_HEADER_FLAG;
- while (report_mount(fp, id, NULL, &oid, form, XFS_GROUP_QUOTA,
+ while (report_mount(fp, &d, id, NULL, &oid, form, XFS_GROUP_QUOTA,
mount, flags)) {
id = oid + 1;
}
} else {
setgrent();
while ((g = getgrent()) != NULL) {
- if (report_mount(fp, g->gr_gid, g->gr_name, NULL,
+ if (report_mount(fp, &d, g->gr_gid, g->gr_name, NULL,
form, XFS_GROUP_QUOTA, mount, flags))
flags |= NO_HEADER_FLAG;
}
@@ -555,21 +557,22 @@ report_project_mount(
uint flags)
{
fs_project_t *p;
+ fs_disk_quota_t d;
uint id = 0, oid;

if (upper) { /* identifier range specified */
for (id = lower; id <= upper; id++) {
- if (report_mount(fp, id, NULL, NULL,
+ if (report_mount(fp, &d, id, NULL, NULL,
form, XFS_PROJ_QUOTA, mount, flags))
flags |= NO_HEADER_FLAG;
}
- } else if (report_mount(fp, id, NULL, &oid, form,
+ } else if (report_mount(fp, &d, id, NULL, &oid, form,
XFS_PROJ_QUOTA, mount,
flags|GETNEXTQUOTA_FLAG)) {
id = oid + 1;
flags |= GETNEXTQUOTA_FLAG;
flags |= NO_HEADER_FLAG;
- while (report_mount(fp, id, NULL, &oid, form, XFS_PROJ_QUOTA,
+ while (report_mount(fp, &d, id, NULL, &oid, form, XFS_PROJ_QUOTA,
mount, flags)) {
id = oid + 1;
}
@@ -579,14 +582,14 @@ report_project_mount(
* Print default project quota, even if projid 0
* isn't defined
*/
- if (report_mount(fp, 0, NULL, NULL,
+ if (report_mount(fp, &d, 0, NULL, NULL,
form, XFS_PROJ_QUOTA, mount, flags))
flags |= NO_HEADER_FLAG;
}

setprent();
while ((p = getprent()) != NULL) {
- if (report_mount(fp, p->pr_prid, p->pr_name, NULL,
+ if (report_mount(fp, &d, p->pr_prid, p->pr_name, NULL,
form, XFS_PROJ_QUOTA, mount, flags))
flags |= NO_HEADER_FLAG;
}
--
2.27.0