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 <jlayton@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									76341cabbd
								
							
						
					
					
						commit
						cbeaf9510a
					
				| @ -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); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user