]> Gentwo Git Trees - linux/.git/commit
io_uring/uring_cmd: avoid double indirect call in task work dispatch
authorCaleb Sander Mateos <csander@purestorage.com>
Fri, 31 Oct 2025 20:34:30 +0000 (14:34 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 3 Nov 2025 15:31:26 +0000 (08:31 -0700)
commit20fb3d05a34b55c8ec28ec3d3555e70c5bc0c72d
treec21621ede5a7a4c25bdf7886a59289ef97e1d485
parentc33e779aba6804778c1440192a8033a145ba588d
io_uring/uring_cmd: avoid double indirect call in task work dispatch

io_uring task work dispatch makes an indirect call to struct io_kiocb's
io_task_work.func field to allow running arbitrary task work functions.
In the uring_cmd case, this calls io_uring_cmd_work(), which immediately
makes another indirect call to struct io_uring_cmd's task_work_cb field.
Change the uring_cmd task work callbacks to functions whose signatures
match io_req_tw_func_t. Add a function io_uring_cmd_from_tw() to convert
from the task work's struct io_tw_req argument to struct io_uring_cmd *.
Define a constant IO_URING_CMD_TASK_WORK_ISSUE_FLAGS to avoid
manufacturing issue_flags in the uring_cmd task work callbacks. Now
uring_cmd task work dispatch makes a single indirect call to the
uring_cmd implementation's callback. This also allows removing the
task_work_cb field from struct io_uring_cmd, freeing up 8 bytes for
future storage.
Since fuse_uring_send_in_task() now has access to the io_tw_token_t,
check its cancel field directly instead of relying on the
IO_URING_F_TASK_DEAD issue flag.

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/ioctl.c
drivers/block/ublk_drv.c
drivers/nvme/host/ioctl.c
fs/btrfs/ioctl.c
fs/fuse/dev_uring.c
include/linux/io_uring/cmd.h
include/linux/io_uring_types.h
io_uring/uring_cmd.c