Commit b2cb805f authored by Jens Axboe's avatar Jens Axboe

io_uring: abstract out a io_poll_find_helper()

We'll need this helper for another purpose, for now just abstract it
out and have io_poll_cancel() use it for lookups.
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 5082620f
...@@ -5286,7 +5286,7 @@ static bool io_poll_remove_all(struct io_ring_ctx *ctx, struct task_struct *tsk, ...@@ -5286,7 +5286,7 @@ static bool io_poll_remove_all(struct io_ring_ctx *ctx, struct task_struct *tsk,
return posted != 0; return posted != 0;
} }
static int io_poll_cancel(struct io_ring_ctx *ctx, __u64 sqe_addr) static struct io_kiocb *io_poll_find(struct io_ring_ctx *ctx, __u64 sqe_addr)
{ {
struct hlist_head *list; struct hlist_head *list;
struct io_kiocb *req; struct io_kiocb *req;
...@@ -5295,12 +5295,23 @@ static int io_poll_cancel(struct io_ring_ctx *ctx, __u64 sqe_addr) ...@@ -5295,12 +5295,23 @@ static int io_poll_cancel(struct io_ring_ctx *ctx, __u64 sqe_addr)
hlist_for_each_entry(req, list, hash_node) { hlist_for_each_entry(req, list, hash_node) {
if (sqe_addr != req->user_data) if (sqe_addr != req->user_data)
continue; continue;
if (io_poll_remove_one(req)) return req;
return 0;
return -EALREADY;
} }
return -ENOENT; return NULL;
}
static int io_poll_cancel(struct io_ring_ctx *ctx, __u64 sqe_addr)
{
struct io_kiocb *req;
req = io_poll_find(ctx, sqe_addr);
if (!req)
return -ENOENT;
if (io_poll_remove_one(req))
return 0;
return -EALREADY;
} }
static int io_poll_remove_prep(struct io_kiocb *req, static int io_poll_remove_prep(struct io_kiocb *req,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment