On Tue, Nov 23, 2021 at 04:18:12PM +0100, Andreas Gruenbacher wrote: > 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. Since commit a6294593e8a1 ("iov_iter: Turn > iov_iter_fault_in_readable into fault_in_iov_iter_readable"), we have > enough information to implement that, so change the code to do that. > > We already take into account that pages faulted in may no longer be > resident by the time they are accessed, so the code will also behave > correctly when part of the buffer isn't faulted in in the first place. > > This leads to an intentional user-visible change when the buffer passed > to write calls contains unmapped or poisoned pages. > > (This change obsoletes commit 554c577cee95 ("gfs2: Prevent endless loops > in gfs2_file_buffered_write").) > > Signed-off-by: Andreas Gruenbacher <agruenba@xxxxxxxxxx> FWIW: Reviewed-by: Catalin Marinas <catalin.marinas@xxxxxxx> This would be more consistent as in my tests on a vanilla kernel ext4 and btrfs fail with EFAULT while gfs2 copies as much as it can before hitting the fault. -- Catalin