diff --git a/mm/filemap.c b/mm/filemap.c
index 5bffaa2176cd24bf60112b83f6df14d36a6b44f1..50bdd76fd0802de98bd1a4874356f7419fb5285f 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2823,6 +2823,14 @@ static struct page *do_read_cache_page(struct address_space *mapping,
 		unlock_page(page);
 		goto out;
 	}
+
+	/*
+	 * A previous I/O error may have been due to temporary
+	 * failures.
+	 * Clear page error before actual read, PG_error will be
+	 * set again if read page fails.
+	 */
+	ClearPageError(page);
 	goto filler;
 
 out: