On Thu, 7 Apr 2022, Mark Hemment wrote: > On Thu, 7 Apr 2022 at 01:19, Hugh Dickins <hughd@xxxxxxxxxx> wrote: > > > > What could be going wrong there? I've thought of two possibilities. > > A minor, hopefully easily fixed, issue would be if fs/nfsd has > > trouble with seeing the same page twice in a row: since tmpfs is > > now using the ZERO_PAGE(0) for all pages of a hole, and I think I > > caught sight of code which looks to see if the latest page is the > > same as the one before. It's easy to imagine that might go wrong. > > When I worked at Veritas, data corruption over NFS was hit when > sending the same page in succession. This was triggered via VxFS's > shared page cache, after a file had been dedup'ed. > I can't remember all the details (~15yrs ago), but the core issue was > skb_can_coalesce() returning a false-positive for the 'same page' case > (no check for crossing a page boundary). Very useful input: thank you Mark. That tells me that, even if we spot a "bug" in fs/nfsd, there could be various other places which get confused if given the ZERO_PAGE(0) twice in a row. I won't be able to find them all, I cannot go on risking that. At first I thought of using ZERO_PAGE(0) for even pgoffs, alternating with a tmpfs-specific zeroed page for odd pgoffs. But I was forgetting that copying ZERO_PAGE(0) is itself just a workaround to avoid the 28% slower iov_iter_zero(). I think I have a reasonable hybrid: will reply to Chuck now with that. Hugh I've rewr