aboutsummaryrefslogtreecommitdiff
path: root/io_uring/cancel.c
diff options
context:
space:
mode:
authorGravatar Jens Axboe <axboe@kernel.dk> 2024-01-28 20:11:55 -0700
committerGravatar Jens Axboe <axboe@kernel.dk> 2024-02-08 13:27:06 -0700
commit521223d7c229f83915619f888c99e952f24dc39f (patch)
treeb19885749949ac462562ebc474b8964edc85331f /io_uring/cancel.c
parentio_uring: expand main struct io_kiocb flags to 64-bits (diff)
downloadlinux-521223d7c229f83915619f888c99e952f24dc39f.tar.gz
linux-521223d7c229f83915619f888c99e952f24dc39f.tar.bz2
linux-521223d7c229f83915619f888c99e952f24dc39f.zip
io_uring/cancel: don't default to setting req->work.cancel_seq
Just leave it unset by default, avoiding dipping into the last cacheline (which is otherwise untouched) for the fast path of using poll to drive networked traffic. Add a flag that tells us if the sequence is valid or not, and then we can defer actually assigning the flag and sequence until someone runs cancelations. Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/cancel.c')
-rw-r--r--io_uring/cancel.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/io_uring/cancel.c b/io_uring/cancel.c
index 8a8b07dfc444..acfcdd7f059a 100644
--- a/io_uring/cancel.c
+++ b/io_uring/cancel.c
@@ -58,9 +58,8 @@ bool io_cancel_req_match(struct io_kiocb *req, struct io_cancel_data *cd)
return false;
if (cd->flags & IORING_ASYNC_CANCEL_ALL) {
check_seq:
- if (cd->seq == req->work.cancel_seq)
+ if (io_cancel_match_sequence(req, cd->seq))
return false;
- req->work.cancel_seq = cd->seq;
}
return true;