On Mon, Sep 16, 2019 at 11:34:28AM -0700, Darrick J. Wong wrote: > > - if ((from <= poff || from >= poff + plen) && > > + if (!(flags & IOMAP_WRITE_F_UNSHARE) && > > Mmm, archeology of code that I wrote originally and have forgotten > already... :) > > I think the purpose of F_UNSHARE is to mimic the behavior of the code > that's being removed, and the old behavior is that if a user asks to > unshare a page backed by shared extents we'll read in all the blocks > backing the page, even if that means reading in blocks that weren't part > of the original unshare request, right? No. The flag causes the code to always read the page, even if the iomap range covers the whole block. For normal writes that means we don't to read the block in at all, but for unshare we absolutely must do so.