| From 91803b499cca2fe558abad709ce83dc896b80950 Mon Sep 17 00:00:00 2001 |
| From: Jeff Moyer <jmoyer@redhat.com> |
| Date: Wed, 26 May 2010 11:49:40 -0400 |
| Subject: do_generic_file_read: clear page errors when issuing a fresh read of the page |
| |
| From: Jeff Moyer <jmoyer@redhat.com> |
| |
| commit 91803b499cca2fe558abad709ce83dc896b80950 upstream. |
| |
| I/O errors can happen due to temporary failures, like multipath |
| errors or losing network contact with the iSCSI server. Because |
| of that, the VM will retry readpage on the page. |
| |
| However, do_generic_file_read does not clear PG_error. This |
| causes the system to be unable to actually use the data in the |
| page cache page, even if the subsequent readpage completes |
| successfully! |
| |
| The function filemap_fault has had a ClearPageError before |
| readpage forever. This patch simply adds the same to |
| do_generic_file_read. |
| |
| Signed-off-by: Jeff Moyer <jmoyer@redhat.com> |
| Signed-off-by: Rik van Riel <riel@redhat.com> |
| Acked-by: Larry Woodman <lwoodman@redhat.com> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| mm/filemap.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/mm/filemap.c |
| +++ b/mm/filemap.c |
| @@ -1118,6 +1118,12 @@ page_not_up_to_date_locked: |
| } |
| |
| readpage: |
| + /* |
| + * A previous I/O error may have been due to temporary |
| + * failures, eg. multipath errors. |
| + * PG_error will be set again if readpage fails. |
| + */ |
| + ClearPageError(page); |
| /* Start the actual read. The read will unlock the page. */ |
| error = mapping->a_ops->readpage(filp, page); |
| |