diff options
| author | Jens Axboe <axboe@kernel.dk> | 2024-11-03 10:23:38 -0700 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2024-11-06 13:55:38 -0700 |
| commit | b6f58a3f4aa8dba424356c7a69388a81f4459300 (patch) | |
| tree | 762afa454110f88f4ef7d5e0b7530486710ad8fa /include/linux/io_uring | |
| parent | 6ed368cc5d5d255ffffad33cfa02ecf2b77b7c44 (diff) | |
io_uring: move struct io_kiocb from task_struct to io_uring_task
Rather than store the task_struct itself in struct io_kiocb, store
the io_uring specific task_struct. The life times are the same in terms
of io_uring, and this avoids doing some dereferences through the
task_struct. For the hot path of putting local task references, we can
deref req->tctx instead, which we'll need anyway in that function
regardless of whether it's local or remote references.
This is mostly straight forward, except the original task PF_EXITING
check needs a bit of tweaking. task_work is _always_ run from the
originating task, except in the fallback case, where it's run from a
kernel thread. Replace the potentially racy (in case of fallback work)
checks for req->task->flags with current->flags. It's either the still
the original task, in which case PF_EXITING will be sane, or it has
PF_KTHREAD set, in which case it's fallback work. Both cases should
prevent moving forward with the given request.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'include/linux/io_uring')
| -rw-r--r-- | include/linux/io_uring/cmd.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/io_uring/cmd.h b/include/linux/io_uring/cmd.h index c189d36ad55e..578a3fdf5c71 100644 --- a/include/linux/io_uring/cmd.h +++ b/include/linux/io_uring/cmd.h @@ -110,7 +110,7 @@ static inline void io_uring_cmd_complete_in_task(struct io_uring_cmd *ioucmd, static inline struct task_struct *io_uring_cmd_get_task(struct io_uring_cmd *cmd) { - return cmd_to_io_kiocb(cmd)->task; + return cmd_to_io_kiocb(cmd)->tctx->task; } #endif /* _LINUX_IO_URING_CMD_H */ |
