linux/fs/iomap
Andreas Gruenbacher 631f871f07 fs/iomap: Fix buffered write page prefaulting
When part of the user buffer passed to generic_perform_write() or
iomap_file_buffered_write() cannot be faulted in for reading, the entire
write currently fails.  The correct behavior would be to write all the
data that can be written, up to the point of failure.

Commit a6294593e8 ("iov_iter: Turn iov_iter_fault_in_readable into
fault_in_iov_iter_readable") gave us the information needed, so fix the
page prefaulting in generic_perform_write() and iomap_write_iter() to
only bail out when no pages could be faulted in.

We already factor in that pages that are faulted in may no longer be
resident by the time they are accessed.  Paging out pages has the same
effect as not faulting in those pages in the first place, so the code
can already deal with that.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
2022-03-25 15:14:03 +01:00
..
buffered-io.c fs/iomap: Fix buffered write page prefaulting 2022-03-25 15:14:03 +01:00
direct-io.c gfs2: Fix mmap + page fault deadlocks 2021-11-02 12:25:03 -07:00
fiemap.c iomap: switch iomap_bmap to use iomap_iter 2021-08-16 21:26:33 -07:00
iter.c iomap: move loop control code to iter.c 2021-08-16 21:26:33 -07:00
Makefile iomap: move loop control code to iter.c 2021-08-16 21:26:33 -07:00
seek.c iomap: switch iomap_seek_data to use iomap_iter 2021-08-16 21:26:33 -07:00
swapfile.c mm/swap: consider max pages in iomap_swapfile_add_extent 2021-08-18 12:47:52 -07:00
trace.c iomap: lift common tracing code from xfs to iomap 2019-10-21 08:51:59 -07:00
trace.h iomap: standardize tracepoint formatting and storage 2021-08-26 09:18:53 -07:00