io_uring/cancel: fix sequence matching for IORING_ASYNC_CANCEL_ANY
authorJens Axboe <axboe@kernel.dk>
Fri, 23 Jun 2023 15:38:26 +0000 (09:38 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 17 Jul 2023 16:05:48 +0000 (10:05 -0600)
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 <axboe@kernel.dk>
io_uring/cancel.c

index 8527ec3..bf44563 100644 (file)
@@ -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;