From: Jeff Layton Date: Thu, 6 Jul 2017 11:02:23 +0000 (-0400) Subject: mm: clear AS_EIO/AS_ENOSPC when writeback initiation fails X-Git-Tag: v4.13-rc1~101^2~11 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=cbeaf9510a8631e9bb0077a95fd8b0db0b3be200;p=linux.git mm: clear AS_EIO/AS_ENOSPC when writeback initiation fails filemap_write_and_wait{_range} will return an error if writeback initiation fails, but won't clear errors in the address_space. This is particularly problematic on DAX, as filemap_fdatawrite* is effectively synchronous there. Ensure that we clear the AS_EIO/AS_ENOSPC flags when filemap_fdatawrite* returns an error. Signed-off-by: Jeff Layton --- diff --git a/mm/filemap.c b/mm/filemap.c index e5711b2728f4..49bc9720fb00 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -515,6 +515,9 @@ int filemap_write_and_wait(struct address_space *mapping) int err2 = filemap_fdatawait(mapping); if (!err) err = err2; + } else { + /* Clear any previously stored errors */ + filemap_check_errors(mapping); } } else { err = filemap_check_errors(mapping); @@ -549,6 +552,9 @@ int filemap_write_and_wait_range(struct address_space *mapping, lstart, lend); if (!err) err = err2; + } else { + /* Clear any previously stored errors */ + filemap_check_errors(mapping); } } else { err = filemap_check_errors(mapping);