[PATCH 4/4] xfs_scrub: batch inumbers calls during fscounters calculation

Darrick J. Wong
2019-08-26T21:28:20Z

Improve the efficiency of the phase 7 inode counts by batching requests,
now that we have per-AG inumbers wrappers.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
scrub/fscounters.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/scrub/fscounters.c b/scrub/fscounters.c
index 91487ebc..c90143c0 100644
--- a/scrub/fscounters.c
+++ b/scrub/fscounters.c
@@ -43,9 +43,10 @@ xfs_count_inodes_ag(
{
struct xfs_inumbers_req *ireq;
uint64_t nr = 0;
+ unsigned int i;
int error;

- ireq = xfrog_inumbers_alloc_req(1, 0);
+ ireq = xfrog_inumbers_alloc_req(64, 0);
if (!ireq) {
str_info(ctx, descr, _("Insufficient memory; giving up."));
return false;
@@ -55,7 +56,8 @@ xfs_count_inodes_ag(
while (!(error = xfrog_inumbers(&ctx->mnt, ireq))) {
if (ireq->hdr.ocount == 0)
break;
- nr += ireq->inumbers[0].xi_alloccount;
+ for (i = 0; i < ireq->hdr.ocount; i++)
+ nr += ireq->inumbers[i].xi_alloccount;
}

free(ireq);