summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2020-04-23 09:35:32 -0600
committerJens Axboe <axboe@kernel.dk>2020-04-23 09:35:32 -0600
commit165e06d6691800818c832211bbbe6c90b5a63341 (patch)
treeace4faee6c4b892a5e465ef1facc133e8215211d
parent1b36a90fdef22b67e6ed1937c3422eaece4cfaf0 (diff)
parent44575a67314b3768d4415252271e8f60c5c70118 (diff)
Merge branch 'io_uring-5.7' into for-currentfor-current
* io_uring-5.7: io_uring: only restore req->work for req that needs do completion
-rw-r--r--fs/io_uring.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index 381d50becd04..c687f57fb651 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -4200,17 +4200,17 @@ static void io_async_task_func(struct callback_head *cb)
spin_unlock_irq(&ctx->completion_lock);
+ /* restore ->work in case we need to retry again */
+ memcpy(&req->work, &apoll->work, sizeof(req->work));
+
if (canceled) {
kfree(apoll);
io_cqring_ev_posted(ctx);
req_set_fail_links(req);
- io_put_req(req);
+ io_double_put_req(req);
return;
}
- /* restore ->work in case we need to retry again */
- memcpy(&req->work, &apoll->work, sizeof(req->work));
-
__set_current_state(TASK_RUNNING);
mutex_lock(&ctx->uring_lock);
__io_queue_sqe(req, NULL);
@@ -4369,7 +4369,7 @@ static bool io_poll_remove_one(struct io_kiocb *req)
hash_del(&req->hash_node);
- if (apoll) {
+ if (do_complete && apoll) {
/*
* restore ->work because we need to call io_req_work_drop_env.
*/