On 2/6/25 5:56 AM, lizetao wrote: > Hi, > >> -----Original Message----- >> From: Jens Axboe <axboe@xxxxxxxxx> >> Sent: Thursday, February 6, 2025 4:26 AM >> To: io-uring@xxxxxxxxxxxxxxx >> Cc: Jens Axboe <axboe@xxxxxxxxx> >> Subject: [PATCH 5/6] io_uring/futex: use generic io_cancel_remove() helper >> >> Don't implement our own loop rolling and checking, just use the generic helper to >> find and cancel requests. >> >> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> >> --- >> io_uring/futex.c | 24 +----------------------- >> 1 file changed, 1 insertion(+), 23 deletions(-) >> >> diff --git a/io_uring/futex.c b/io_uring/futex.c index >> 808eb57f1210..54b9760f2aa6 100644 >> --- a/io_uring/futex.c >> +++ b/io_uring/futex.c >> @@ -116,29 +116,7 @@ static bool __io_futex_cancel(struct io_kiocb *req) int >> io_futex_cancel(struct io_ring_ctx *ctx, struct io_cancel_data *cd, >> unsigned int issue_flags) >> { >> - struct hlist_node *tmp; >> - struct io_kiocb *req; >> - int nr = 0; >> - >> - if (cd->flags & >> (IORING_ASYNC_CANCEL_FD|IORING_ASYNC_CANCEL_FD_FIXED)) >> - return -ENOENT; > > Why remove this check? It isn't really necessary. Yes we could loop pointlessly if they are set and not find anything, but it's really just a bad use case from the application. End result should be the same, that -ENOENT is returned on trying to lookup a futex operation based on the fd. -- Jens Axboe