On 11/9/18 5:45 PM, Darrick J. Wong wrote:
From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> We try to load a single inobt record with each FSINUMBERS call. If the chunk is totally empty (which can happen when there are more than one inobt record per block) we should skip to the next INUMBERS call since there are no inodes to bulkstat. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- scrub/inodes.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scrub/inodes.c b/scrub/inodes.c index 693f21ec..442a5978 100644 --- a/scrub/inodes.c +++ b/scrub/inodes.c @@ -139,6 +139,12 @@ xfs_iterate_inodes_range( /* Load the inodes. */ ino = inogrp.xi_startino - 1; bulkreq.icount = inogrp.xi_alloccount; + /* + * We can have totally empty inode chunks on filesystems where + * there are more than 64 inodes per block. Skip these. + */ + if (inogrp.xi_alloccount == 0) + goto igrp_retry; error = ioctl(ctx->mnt_fd, XFS_IOC_FSBULKSTAT, &bulkreq); if (error) str_info(ctx, descr, "%s", strerror_r(errno,
Looks ok to me. Reviewed-by: Allison Henderson <allison.henderson@xxxxxxxxxx>