Merge tag 'hyperv-fixes-signed' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / fs / io_uring.c
index 381d50b..c687f57 100644 (file)
@@ -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.
                 */