From efb35f94fd1d66690fe31f0ee578479e0787bbf8 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Thu, 21 Nov 2024 08:27:10 -0700 Subject: [PATCH 1/2] io_uring: make task_work pending check dependent on ring type There's no need to check for generic task_work for DEFER_TASKRUN, if we have local task_work pending. This avoids dipping into the huge task_struct, if we have normal task_work pending. Signed-off-by: Jens Axboe --- io_uring/io_uring.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/io_uring/io_uring.h b/io_uring/io_uring.h index 12abee607e4a..214f9f175102 100644 --- a/io_uring/io_uring.h +++ b/io_uring/io_uring.h @@ -354,7 +354,9 @@ static inline bool io_local_work_pending(struct io_ring_ctx *ctx) static inline bool io_task_work_pending(struct io_ring_ctx *ctx) { - return task_work_pending(current) || io_local_work_pending(ctx); + if (ctx->flags & IORING_SETUP_DEFER_TASKRUN && io_local_work_pending(ctx)) + return true; + return task_work_pending(current); } static inline void io_tw_lock(struct io_ring_ctx *ctx, struct io_tw_state *ts) -- 2.45.2