On Thu, Feb 14, 2019 at 03:26:22PM -0500, Jerome Glisse wrote: > On Mon, Feb 11, 2019 at 11:06:54AM -0700, Jason Gunthorpe wrote: > > But it also doesnt' trucate/create a hole. Another thread wrote to it > > right away and the 'hole' was essentially instantly reallocated. This > > is an inherent, pre-existing, race in the ftrucate/etc APIs. > > So it is kind of a // point to this, but direct I/O do "truncate" pages > or more exactly after a write direct I/O invalidate_inode_pages2_range() > is call and it will try to unmap and remove from page cache all pages > that have been written too. Hang on. Pages are tossed out of the page cache _before_ an O_DIRECT write starts. The only way what you're describing can happen is if there's a race between an O_DIRECT writer and an mmap. Which is either an incredibly badly written application or someone trying an exploit.