Message ID | 156944734585.298887.10261889375809730388.stgit@magnolia (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | xfs_scrub: fix IO error detection during media verify | expand |
On 9/25/19 4:35 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > Make sure we always issue media verification requests aligned to the > minimum IO size that the caller cares about. Concretely, this means > that we only care about doing IO in filesystem block-sized chunks. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com>
diff --git a/scrub/read_verify.c b/scrub/read_verify.c index 73d30817..9d9be68d 100644 --- a/scrub/read_verify.c +++ b/scrub/read_verify.c @@ -77,6 +77,15 @@ read_verify_pool_alloc( struct read_verify_pool *rvp; int ret; + /* + * The minimum IO size must be a multiple of the disk sector size + * and a factor of the max io size. + */ + if (miniosz % disk->d_lbasize) + return EINVAL; + if (RVP_IO_MAX_SIZE % miniosz) + return EINVAL; + rvp = calloc(1, sizeof(struct read_verify_pool)); if (!rvp) return errno; @@ -245,6 +254,11 @@ read_verify_schedule_io( int ret; assert(rvp->readbuf); + + /* Round up and down to the start of a miniosz chunk. */ + start &= ~(rvp->miniosz - 1); + length = roundup(length, rvp->miniosz); + rv = ptvar_get(rvp->rvstate, &ret); if (ret) return ret;