In case kernel doesn't support XFS_GETNEXTQUOTA the report/dump command will fallback to iterating over all known uid/gid/pid. However, currently it won't take -L/-U range limits into account (all entities with non-zero qoutas will be outputted). This applies those limits for fallback case. Signed-off-by: Andrey Albershteyn <aalbersh@xxxxxxxxxx> Reviewed-by: Christoph Hellwig <hch@xxxxxx> Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- quota/report.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/quota/report.c b/quota/report.c index 2b9577a5..2acf81b8 100644 --- a/quota/report.c +++ b/quota/report.c @@ -157,9 +157,11 @@ dump_limits_any_type( struct group *g; setgrent(); while ((g = getgrent()) != NULL) { - get_dquot(&d, g->gr_gid, type, - mount->fs_name, 0); - dump_file(fp, &d, mount->fs_name); + if (get_dquot(&d, g->gr_gid, type, + mount->fs_name, 0) && + !(lower && (d.d_id < lower)) && + !(upper && (d.d_id > upper))) + dump_file(fp, &d, mount->fs_name); } endgrent(); break; @@ -168,9 +170,11 @@ dump_limits_any_type( struct fs_project *p; setprent(); while ((p = getprent()) != NULL) { - get_dquot(&d, p->pr_prid, type, - mount->fs_name, 0); - dump_file(fp, &d, mount->fs_name); + if (get_dquot(&d, p->pr_prid, type, + mount->fs_name, 0) && + !(lower && (d.d_id < lower)) && + !(upper && (d.d_id > upper))) + dump_file(fp, &d, mount->fs_name); } endprent(); break; @@ -179,9 +183,11 @@ dump_limits_any_type( struct passwd *u; setpwent(); while ((u = getpwent()) != NULL) { - get_dquot(&d, u->pw_uid, type, - mount->fs_name, 0); - dump_file(fp, &d, mount->fs_name); + if (get_dquot(&d, u->pw_uid, type, + mount->fs_name, 0) && + !(lower && (d.d_id < lower)) && + !(upper && (d.d_id > upper))) + dump_file(fp, &d, mount->fs_name); } endpwent(); break; @@ -474,7 +480,9 @@ report_user_mount( setpwent(); while ((u = getpwent()) != NULL) { if (get_dquot(&d, u->pw_uid, XFS_USER_QUOTA, - mount->fs_name, flags)) { + mount->fs_name, flags) && + !(lower && (d.d_id < lower)) && + !(upper && (d.d_id > upper))) { report_mount(fp, &d, u->pw_name, form, XFS_USER_QUOTA, mount, flags); flags |= NO_HEADER_FLAG; @@ -514,7 +522,9 @@ report_group_mount( setgrent(); while ((g = getgrent()) != NULL) { if (get_dquot(&d, g->gr_gid, XFS_GROUP_QUOTA, - mount->fs_name, flags)) { + mount->fs_name, flags) && + !(lower && (d.d_id < lower)) && + !(upper && (d.d_id > upper))) { report_mount(fp, &d, g->gr_name, form, XFS_GROUP_QUOTA, mount, flags); flags |= NO_HEADER_FLAG; @@ -556,7 +566,9 @@ report_project_mount( * isn't defined */ if (get_dquot(&d, 0, XFS_PROJ_QUOTA, mount->fs_name, - flags)) { + flags) && + !(lower && (d.d_id < lower)) && + !(upper && (d.d_id > upper))) { report_mount(fp, &d, NULL, form, XFS_PROJ_QUOTA, mount, flags); flags |= NO_HEADER_FLAG; @@ -566,7 +578,9 @@ report_project_mount( setprent(); while ((p = getprent()) != NULL) { if (get_dquot(&d, p->pr_prid, XFS_PROJ_QUOTA, - mount->fs_name, flags)) { + mount->fs_name, flags) && + !(lower && (d.d_id < lower)) && + !(upper && (d.d_id > upper))) { report_mount(fp, &d, p->pr_name, form, XFS_PROJ_QUOTA, mount, flags); flags |= NO_HEADER_FLAG; -- 2.27.0