]> www.infradead.org Git - users/hch/misc.git/commit
io_uring: move struct io_kiocb from task_struct to io_uring_task
authorJens Axboe <axboe@kernel.dk>
Sun, 3 Nov 2024 17:23:38 +0000 (10:23 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 6 Nov 2024 20:55:38 +0000 (13:55 -0700)
commitb6f58a3f4aa8dba424356c7a69388a81f4459300
tree762afa454110f88f4ef7d5e0b7530486710ad8fa
parent6ed368cc5d5d255ffffad33cfa02ecf2b77b7c44
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>
14 files changed:
include/linux/io_uring/cmd.h
include/linux/io_uring_types.h
io_uring/cancel.c
io_uring/fdinfo.c
io_uring/io_uring.c
io_uring/io_uring.h
io_uring/msg_ring.c
io_uring/notif.c
io_uring/poll.c
io_uring/rw.c
io_uring/tctx.c
io_uring/timeout.c
io_uring/uring_cmd.c
io_uring/waitid.c