diff --git a/[refs] b/[refs] index 72889ff30e62..eca84269e21c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 264e3e889d86e552b4191d69bb60f4f3b383135a +refs/heads/master: 6cb2a21049b8990df4576c5fce4d48d0206c22d5 diff --git a/trunk/fs/aio.c b/trunk/fs/aio.c index b74c567383bc..6af921940622 100644 --- a/trunk/fs/aio.c +++ b/trunk/fs/aio.c @@ -996,6 +996,14 @@ int aio_complete(struct kiocb *iocb, long res, long res2) /* everything turned out well, dispose of the aiocb. */ ret = __aio_put_req(ctx, iocb); + /* + * We have to order our ring_info tail store above and test + * of the wait list below outside the wait lock. This is + * like in wake_up_bit() where clearing a bit has to be + * ordered with the unlocked test. + */ + smp_mb(); + if (waitqueue_active(&ctx->wait)) wake_up(&ctx->wait);