diff options
author | 2020-04-24 12:58:22 -0700 | |
---|---|---|
committer | 2020-04-24 12:58:22 -0700 | |
commit | aee1a009c9d247756b368890e3f886174776d3db (patch) | |
tree | c7c2f5fe0f8fe5df2d11e0a7e194db9bbf0028bd /fs | |
parent | Merge tag 'libata-5.7-2020-04-24' of git://git.kernel.dk/linux-block (diff) | |
parent | io_uring: only restore req->work for req that needs do completion (diff) | |
download | linux-aee1a009c9d247756b368890e3f886174776d3db.tar.gz linux-aee1a009c9d247756b368890e3f886174776d3db.tar.bz2 linux-aee1a009c9d247756b368890e3f886174776d3db.zip |
Merge tag 'io_uring-5.7-2020-04-24' of git://git.kernel.dk/linux-block
Pull io_uring fix from Jens Axboe:
"Single fixup for a change that went into -rc2"
* tag 'io_uring-5.7-2020-04-24' of git://git.kernel.dk/linux-block:
io_uring: only restore req->work for req that needs do completion
Diffstat (limited to 'fs')
-rw-r--r-- | fs/io_uring.c | 10 |
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. */ |