Index: sys/kern/vfs_vnops.c.sav3 =================================================================== --- sys/kern/vfs_vnops.c.sav3 +++ sys/kern/vfs_vnops.c.sav3 @@ -3009,7 +3009,7 @@ int error; bool cantseek, readzeros, eof, lastblock; ssize_t aresid; - size_t copylen, len, savlen; + size_t copylen, len, rem, savlen; char *dat; long holein, holeout; uint64_t curtime, stoptime; @@ -3083,7 +3083,17 @@ * This value is clipped at 4Kbytes and 1Mbyte. */ blksize = MAX(holein, holeout); - if (blksize == 0) + + /* Clip len to end at an exact multiple of hole size. */ + if (blksize > 1) { + rem = *inoffp % blksize; + if (rem > 0) + rem = blksize - rem; + if (len - rem > blksize) + len = savlen = rounddown(len - rem, blksize) + rem; + } + + if (blksize <= 1) blksize = MAX(invp->v_mount->mnt_stat.f_iosize, outvp->v_mount->mnt_stat.f_iosize); if (blksize < 4096)