diff options
author | Jens Axboe <axboe@kernel.dk> | 2021-03-11 20:49:20 +0300 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2021-03-11 20:49:20 +0300 |
commit | d052d1d685f5125249ab4ff887562c88ba959638 (patch) | |
tree | 46acca647cf9277efe8a50c322a02060b75db348 /fs/io_uring.c | |
parent | 5c2469e0a22e035d52f3ba768151cc75e3d4a1cd (diff) | |
download | linux-d052d1d685f5125249ab4ff887562c88ba959638.tar.xz |
io_uring: perform IOPOLL reaping if canceler is thread itself
We bypass IOPOLL completion polling (and reaping) for the SQPOLL thread,
but if it's the thread itself invoking cancelations, then we still need
to perform it or no one will.
Fixes: 9936c7c2bc76 ("io_uring: deduplicate core cancellations sequence")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r-- | fs/io_uring.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c index 472eab7359f2..49f85f49e1c3 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -8658,7 +8658,8 @@ static void io_uring_try_cancel_requests(struct io_ring_ctx *ctx, } /* SQPOLL thread does its own polling */ - if (!(ctx->flags & IORING_SETUP_SQPOLL) && !files) { + if ((!(ctx->flags & IORING_SETUP_SQPOLL) && !files) || + (ctx->sq_data && ctx->sq_data->thread == current)) { while (!list_empty_careful(&ctx->iopoll_list)) { io_iopoll_try_reap_events(ctx); ret = true; |