diff --git a/mm/filemap.c b/mm/filemap.c
index 768687f1d46bb7c92345914f267fb6bbcc7803d7..5d6e4c2000dc674bd0456f6fa92dd2c5f1b0acfe 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1030,8 +1030,8 @@ __generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
 			desc.error = 0;
 			do_generic_file_read(filp,ppos,&desc,file_read_actor);
 			retval += desc.written;
-			if (!retval) {
-				retval = desc.error;
+			if (desc.error) {
+				retval = retval ?: desc.error;
 				break;
 			}
 		}