Commit a30badf6 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring: use cancelation match helper for poll and timeout requests



Get rid of the request vs io_cancel_data checking and just use the
exported helper for this.

Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 3a372b66
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -824,15 +824,11 @@ static struct io_kiocb *io_poll_file_find(struct io_ring_ctx *ctx,

		spin_lock(&hb->lock);
		hlist_for_each_entry(req, &hb->list, hash_node) {
			if (!(cd->flags & IORING_ASYNC_CANCEL_ANY) &&
			    req->file != cd->file)
				continue;
			if (cd->seq == req->work.cancel_seq)
				continue;
			req->work.cancel_seq = cd->seq;
			if (io_cancel_req_match(req, cd)) {
				*out_bucket = hb;
				return req;
			}
		}
		spin_unlock(&hb->lock);
	}
	return NULL;
+3 −9
Original line number Diff line number Diff line
@@ -268,17 +268,11 @@ static struct io_kiocb *io_timeout_extract(struct io_ring_ctx *ctx,
	list_for_each_entry(timeout, &ctx->timeout_list, list) {
		struct io_kiocb *tmp = cmd_to_io_kiocb(timeout);

		if (!(cd->flags & IORING_ASYNC_CANCEL_ANY) &&
		    cd->data != tmp->cqe.user_data)
			continue;
		if (cd->flags & (IORING_ASYNC_CANCEL_ALL|IORING_ASYNC_CANCEL_ANY)) {
			if (cd->seq == tmp->work.cancel_seq)
				continue;
			tmp->work.cancel_seq = cd->seq;
		}
		if (io_cancel_req_match(tmp, cd)) {
			req = tmp;
			break;
		}
	}
	if (!req)
		return ERR_PTR(-ENOENT);