diff --git a/mm/filemap.c b/mm/filemap.c
index 2dead9adf8b76806e66ac1b0169510773be58e14..1e6a7d34874fd31f3e9549c7540a4ce28c2402c6 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1461,6 +1461,11 @@ page_not_uptodate:
 	 */
 	ClearPageError(page);
 	error = mapping->a_ops->readpage(file, page);
+	if (!error) {
+		wait_on_page_locked(page);
+		if (!PageUptodate(page))
+			error = -EIO;
+	}
 	page_cache_release(page);
 
 	if (!error || error == AOP_TRUNCATED_PAGE)