Avoid repeating the 2 dereferences to get the ublk_device from the io_uring_cmd by passing it from ublk_ch_uring_cmd_local() to ublk_register_io_buf(). Signed-off-by: Caleb Sander Mateos --- drivers/block/ublk_drv.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index d6d8dcb72e4b..cb51f3f3cd33 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -2123,15 +2123,15 @@ static void ublk_io_release(void *priv) else ublk_put_req_ref(io, rq); } static int ublk_register_io_buf(struct io_uring_cmd *cmd, + struct ublk_device *ub, const struct ublk_queue *ubq, struct ublk_io *io, unsigned int index, unsigned int issue_flags) { - struct ublk_device *ub = cmd->file->private_data; struct request *req; int ret; if (!ublk_support_zero_copy(ubq)) return -EINVAL; @@ -2150,10 +2150,11 @@ static int ublk_register_io_buf(struct io_uring_cmd *cmd, return 0; } static int ublk_daemon_register_io_buf(struct io_uring_cmd *cmd, + struct ublk_device *ub, const struct ublk_queue *ubq, struct ublk_io *io, unsigned index, unsigned issue_flags) { unsigned new_registered_buffers; struct request *req = io->req; @@ -2163,11 +2164,12 @@ ublk_daemon_register_io_buf(struct io_uring_cmd *cmd, * Ensure there are still references for ublk_sub_req_ref() to release. * If not, fall back on the thread-safe buffer registration. */ new_registered_buffers = io->task_registered_buffers + 1; if (unlikely(new_registered_buffers >= UBLK_REFCOUNT_INIT)) - return ublk_register_io_buf(cmd, ubq, io, index, issue_flags); + return ublk_register_io_buf(cmd, ub, ubq, io, index, + issue_flags); if (!ublk_support_zero_copy(ubq) || !ublk_rq_has_data(req)) return -EINVAL; ret = io_buffer_register_bvec(cmd, req, ublk_io_release, index, @@ -2354,11 +2356,11 @@ static int ublk_ch_uring_cmd_local(struct io_uring_cmd *cmd, /* * ublk_register_io_buf() accesses only the io's refcount, * so can be handled on any task */ if (_IOC_NR(cmd_op) == UBLK_IO_REGISTER_IO_BUF) - return ublk_register_io_buf(cmd, ubq, io, addr, + return ublk_register_io_buf(cmd, ub, ubq, io, addr, issue_flags); goto out; } @@ -2376,11 +2378,11 @@ static int ublk_ch_uring_cmd_local(struct io_uring_cmd *cmd, ^ (_IOC_NR(cmd_op) == UBLK_IO_NEED_GET_DATA)) goto out; switch (_IOC_NR(cmd_op)) { case UBLK_IO_REGISTER_IO_BUF: - return ublk_daemon_register_io_buf(cmd, ubq, io, addr, + return ublk_daemon_register_io_buf(cmd, ub, ubq, io, addr, issue_flags); case UBLK_IO_COMMIT_AND_FETCH_REQ: ret = ublk_check_commit_and_fetch(ubq, io, addr); if (ret) goto out; -- 2.45.2