From: Jens Axboe Date: Wed, 17 Mar 2021 14:17:19 +0000 (-0600) Subject: io_uring: abstract out a io_poll_find_helper() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=b2cb805f6dd40938c0398c94787741a08ed5e921;p=linux.git 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: Jens Axboe --- diff --git a/fs/io_uring.c b/fs/io_uring.c index e23549330904e..3c54e8c9f81fa 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -5286,7 +5286,7 @@ static bool io_poll_remove_all(struct io_ring_ctx *ctx, struct task_struct *tsk, 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 io_kiocb *req; @@ -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) { if (sqe_addr != req->user_data) continue; - if (io_poll_remove_one(req)) - return 0; - return -EALREADY; + return req; } - 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,