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,6 +3083,16 @@ * This value is clipped at 4Kbytes and 1Mbyte. */ blksize = MAX(holein, holeout); + + /* Clip len to end at an exact multiple of hole size. */ + if (blksize > 0) { + rem = *inoffp % blksize; + if (rem > 0) + rem = blksize - rem; + if (len - rem > blksize) + len = rounddown(len - rem, blksize) + rem; + } + if (blksize == 0) blksize = MAX(invp->v_mount->mnt_stat.f_iosize, outvp->v_mount->mnt_stat.f_iosize);