On Thu, Feb 14, 2019 at 04:39:22PM -0500, Jerome Glisse wrote: > On Thu, Feb 14, 2019 at 12:50:49PM -0800, Matthew Wilcox wrote: > > 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. > > I believe they are tossed after O_DIRECT starts (dio_complete). But Yes, but also before. See iomap_dio_rw() and generic_file_direct_write(). > regardless the issues is that an RDMA can have pin the page long > before the DIO in which case the page can not be toss from the page > cache and what ever is written to the block device will be discarded > once the RDMA unpin the pages. So we would end up in the code path > that spit out big error message in the kernel log. Which tells us filesystem people that the applications are doing something that _will_ cause data corruption and hence not to spend any time triaging data corruption reports because it's not a filesystem bug that caused it. See open(2): Applications should avoid mixing O_DIRECT and normal I/O to the same file, and especially to overlapping byte regions in the same file. Even when the filesystem correctly handles the coherency issues in this situation, overall I/O throughput is likely to be slower than using either mode alone. Likewise, applications should avoid mixing mmap(2) of files with direct I/O to the same files. -Dave. -- Dave Chinner david@xxxxxxxxxxxxx