Commit 932de5e3 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring/waitid: use generic io_cancel_remove() helper



Don't implement our own loop rolling and checking, just use the generic
helper to find and cancel requests.

Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 2eaa2fac
Loading
Loading
Loading
Loading
+1 −23
Original line number Diff line number Diff line
@@ -158,29 +158,7 @@ static bool __io_waitid_cancel(struct io_kiocb *req)
int io_waitid_cancel(struct io_ring_ctx *ctx, struct io_cancel_data *cd,
		     unsigned int issue_flags)
{
	struct hlist_node *tmp;
	struct io_kiocb *req;
	int nr = 0;

	if (cd->flags & (IORING_ASYNC_CANCEL_FD|IORING_ASYNC_CANCEL_FD_FIXED))
		return -ENOENT;

	io_ring_submit_lock(ctx, issue_flags);
	hlist_for_each_entry_safe(req, tmp, &ctx->waitid_list, hash_node) {
		if (req->cqe.user_data != cd->data &&
		    !(cd->flags & IORING_ASYNC_CANCEL_ANY))
			continue;
		if (__io_waitid_cancel(req))
			nr++;
		if (!(cd->flags & IORING_ASYNC_CANCEL_ALL))
			break;
	}
	io_ring_submit_unlock(ctx, issue_flags);

	if (nr)
		return nr;

	return -ENOENT;
	return io_cancel_remove(ctx, cd, issue_flags, &ctx->waitid_list, __io_waitid_cancel);
}

bool io_waitid_remove_all(struct io_ring_ctx *ctx, struct io_uring_task *tctx,