mirror of https://gitee.com/openkylin/linux.git
xfs: restore shutdown check in mapped write fault path
XFS triggers an iomap warning in the write fault path due to a !PageUptodate() page if a write fault happens to occur on a page that recently failed writeback. The iomap writeback error handling code can clear the Uptodate flag if no portion of the page is submitted for I/O. This is reproduced by fstest generic/019, which combines various forms of I/O with simulated disk failures that inevitably lead to filesystem shutdown (which then unconditionally fails page writeback). This is a regression introduced by commitf150b42343
("xfs: split the iomap ops for buffered vs direct writes") due to the removal of a shutdown check and explicit error return in the ->iomap_begin() path used by the write fault path. The explicit error return historically translated to a SIGBUS, but now carries on with iomap processing where it complains about the unexpected state. Restore the shutdown check to xfs_buffered_write_iomap_begin() to restore historical behavior. Fixes:f150b42343
("xfs: split the iomap ops for buffered vs direct writes") Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Eric Sandeen <sandeen@redhat.com> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
8e8794b919
commit
e4826691cc
|
@ -860,6 +860,9 @@ xfs_buffered_write_iomap_begin(
|
||||||
int allocfork = XFS_DATA_FORK;
|
int allocfork = XFS_DATA_FORK;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
|
if (XFS_FORCED_SHUTDOWN(mp))
|
||||||
|
return -EIO;
|
||||||
|
|
||||||
/* we can't use delayed allocations when using extent size hints */
|
/* we can't use delayed allocations when using extent size hints */
|
||||||
if (xfs_get_extsz_hint(ip))
|
if (xfs_get_extsz_hint(ip))
|
||||||
return xfs_direct_write_iomap_begin(inode, offset, count,
|
return xfs_direct_write_iomap_begin(inode, offset, count,
|
||||||
|
|
Loading…
Reference in New Issue