diff options
-rw-r--r-- | fs/aio.c | 12 |
1 files changed, 8 insertions, 4 deletions
@@ -1514,10 +1514,14 @@ int fastcall io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | |||
1514 | goto out_put_req; | 1514 | goto out_put_req; |
1515 | 1515 | ||
1516 | spin_lock_irq(&ctx->ctx_lock); | 1516 | spin_lock_irq(&ctx->ctx_lock); |
1517 | list_add_tail(&req->ki_run_list, &ctx->run_list); | 1517 | if (likely(list_empty(&ctx->run_list))) { |
1518 | /* drain the run list */ | 1518 | aio_run_iocb(req); |
1519 | while (__aio_run_iocbs(ctx)) | 1519 | } else { |
1520 | ; | 1520 | list_add_tail(&req->ki_run_list, &ctx->run_list); |
1521 | /* drain the run list */ | ||
1522 | while (__aio_run_iocbs(ctx)) | ||
1523 | ; | ||
1524 | } | ||
1521 | spin_unlock_irq(&ctx->ctx_lock); | 1525 | spin_unlock_irq(&ctx->ctx_lock); |
1522 | aio_put_req(req); /* drop extra ref to req */ | 1526 | aio_put_req(req); /* drop extra ref to req */ |
1523 | return 0; | 1527 | return 0; |