diff -r 97344a0f62c9 fs/aio.c --- a/fs/aio.c Tue Apr 27 21:18:14 2010 +0400 +++ b/fs/aio.c Tue Apr 27 21:30:23 2010 +0400 @@ -748,6 +748,9 @@ out: spin_lock_irq(&ctx->ctx_lock); + /* will make __queue_kicked_iocb succeed from here on */ + INIT_LIST_HEAD(&iocb->ki_run_list); + if (-EIOCBRETRY == ret) { /* * OK, now that we are done with this iteration @@ -756,8 +759,6 @@ * "kick" can start the next iteration */ - /* will make __queue_kicked_iocb succeed from here on */ - INIT_LIST_HEAD(&iocb->ki_run_list); /* we must queue the next iteration ourselves, if it * has already been kicked */ if (kiocbIsKicked(iocb)) {