linux/fs/iomap
Andreas Gruenbacher c114bbc6c4 iomap: Fix direct I/O write consistency check
When a direct I/O write falls back to buffered I/O entirely, dio->size
will be 0 in iomap_dio_complete.  Function invalidate_inode_pages2_range
will try to invalidate the rest of the address space.  If there are any
dirty pages in that range, the write will fail and a "Page cache
invalidation failure on direct I/O" error will be logged.

On gfs2, this can be reproduced as follows:

  xfs_io \
    -c "open -ft foo" -c "pwrite 4k 4k" -c "close" \
    -c "open -d foo" -c "pwrite 0 4k"

Fix this by recognizing 0-length writes.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2020-09-10 08:26:16 -07:00
..
apply.c iomap: Make sure iomap_end is called after iomap_begin 2020-07-06 10:49:27 -07:00
buffered-io.c New code for 5.8: 2020-06-13 12:44:30 -07:00
direct-io.c iomap: Fix direct I/O write consistency check 2020-09-10 08:26:16 -07:00
fiemap.c fs: handle FIEMAP_FLAG_SYNC in fiemap_prep 2020-06-03 23:16:55 -04:00
Makefile iomap: lift common tracing code from xfs to iomap 2019-10-21 08:51:59 -07:00
seek.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
swapfile.c iomap: use a srcmap for a read-modify-write I/O 2019-10-21 08:51:59 -07:00
trace.c iomap: lift common tracing code from xfs to iomap 2019-10-21 08:51:59 -07:00
trace.h iomap: fall back to buffered writes for invalidation failures 2020-08-05 09:24:16 -07:00