From: Jens Axboe Date: Fri, 23 Jun 2023 15:38:26 +0000 (-0600) Subject: io_uring/cancel: fix sequence matching for IORING_ASYNC_CANCEL_ANY X-Git-Tag: v6.6.17~4088^2~43 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a372b66923e4af966af2900da588e3b3de6fcd2;p=platform%2Fkernel%2Flinux-rpi.git io_uring/cancel: fix sequence matching for IORING_ASYNC_CANCEL_ANY We always need to check/update the cancel sequence if IORING_ASYNC_CANCEL_ALL is set. Also kill the redundant check for IORING_ASYNC_CANCEL_ANY at the end, if we get here we know it's not set as we would've matched it higher up. Signed-off-by: Jens Axboe --- diff --git a/io_uring/cancel.c b/io_uring/cancel.c index 8527ec3..bf44563 100644 --- a/io_uring/cancel.c +++ b/io_uring/cancel.c @@ -35,7 +35,7 @@ bool io_cancel_req_match(struct io_kiocb *req, struct io_cancel_data *cd) if (req->ctx != cd->ctx) return false; if (cd->flags & IORING_ASYNC_CANCEL_ANY) { - ; + goto check_seq; } else if (cd->flags & IORING_ASYNC_CANCEL_FD) { if (req->file != cd->file) return false; @@ -43,7 +43,8 @@ bool io_cancel_req_match(struct io_kiocb *req, struct io_cancel_data *cd) if (req->cqe.user_data != cd->data) return false; } - if (cd->flags & (IORING_ASYNC_CANCEL_ALL|IORING_ASYNC_CANCEL_ANY)) { + if (cd->flags & IORING_ASYNC_CANCEL_ALL) { +check_seq: if (cd->seq == req->work.cancel_seq) return false; req->work.cancel_seq = cd->seq;