--- a/fs/direct-io.c	2010-12-17 19:11:29.000000000 -0800
+++ b/fs/direct-io.c	2010-12-17 19:11:33.000000000 -0800
@@ -250,9 +250,12 @@
 
 			end_io(dio->iocb, offset, transferred,
 				    dio->map_bh.b_private, ret, is_async);
-		} else
+		} else {
 			dio->end_io(dio->iocb, offset, transferred,
 				    dio->map_bh.b_private);
+			if (is_async)
+				aio_complete(dio->iocb, ret, 0);
+		}
 	} else if (is_async) {
 		aio_complete(dio->iocb, ret, 0);
 	}
