Skip to content

Commit

Permalink
io_uring: clean up io_kill_linked_timeout() locking
Browse files Browse the repository at this point in the history
Avoid jumping through hoops to silence unused variable warnings, and
also fix sparse rightfully complaining about the locking context:

fs/io_uring.c:1593:39: warning: context imbalance in 'io_kill_linked_timeout' - unexpected unlock

Provide the functional helper as __io_kill_linked_timeout(), and have
separate the locking from it.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Jens Axboe committed Jun 30, 2020
1 parent cbdcb43 commit ab0b645
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions fs/io_uring.c
Original file line number Diff line number Diff line change
@@ -1569,28 +1569,38 @@ static bool io_link_cancel_timeout(struct io_kiocb *req)
return false;
}

static void io_kill_linked_timeout(struct io_kiocb *req)
static bool __io_kill_linked_timeout(struct io_kiocb *req)
{
struct io_ring_ctx *ctx = req->ctx;
struct io_kiocb *link;
bool wake_ev = false;
unsigned long flags = 0; /* false positive warning */

if (!(req->flags & REQ_F_COMP_LOCKED))
spin_lock_irqsave(&ctx->completion_lock, flags);
bool wake_ev;

if (list_empty(&req->link_list))
goto out;
return false;
link = list_first_entry(&req->link_list, struct io_kiocb, link_list);
if (link->opcode != IORING_OP_LINK_TIMEOUT)
goto out;
return false;

list_del_init(&link->link_list);
wake_ev = io_link_cancel_timeout(link);
req->flags &= ~REQ_F_LINK_TIMEOUT;
out:
if (!(req->flags & REQ_F_COMP_LOCKED))
return wake_ev;
}

static void io_kill_linked_timeout(struct io_kiocb *req)
{
struct io_ring_ctx *ctx = req->ctx;
bool wake_ev;

if (!(req->flags & REQ_F_COMP_LOCKED)) {
unsigned long flags;

spin_lock_irqsave(&ctx->completion_lock, flags);
wake_ev = __io_kill_linked_timeout(req);
spin_unlock_irqrestore(&ctx->completion_lock, flags);
} else {
wake_ev = __io_kill_linked_timeout(req);
}

if (wake_ev)
io_cqring_ev_posted(ctx);
}

0 comments on commit ab0b645

Please sign in to comment.