]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ublk: don't access ublk_queue in ublk_need_complete_req()
authorCaleb Sander Mateos <csander@purestorage.com>
Thu, 18 Sep 2025 01:49:51 +0000 (19:49 -0600)
committerJens Axboe <axboe@kernel.dk>
Sat, 20 Sep 2025 12:36:27 +0000 (06:36 -0600)
For ublk servers with many ublk queues, accessing the ublk_queue in
ublk_need_complete_req() is a frequent cache miss. Get the flags from
the ublk_device instead, which is accessed earlier in
ublk_ch_uring_cmd_local().

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c

index b92b7823005dedbcd6b6ad15a00e93384c136ee1..750d0a332685e4af3a926aa9c4026e7c9d5a82dc 100644 (file)
@@ -2267,10 +2267,10 @@ static int ublk_check_commit_and_fetch(const struct ublk_device *ub,
        return 0;
 }
 
-static bool ublk_need_complete_req(const struct ublk_queue *ubq,
+static bool ublk_need_complete_req(const struct ublk_device *ub,
                                   struct ublk_io *io)
 {
-       if (ublk_need_req_ref(ubq))
+       if (ublk_dev_need_req_ref(ub))
                return ublk_sub_req_ref(io);
        return true;
 }
@@ -2387,7 +2387,7 @@ static int ublk_ch_uring_cmd_local(struct io_uring_cmd *cmd,
                io->res = result;
                req = ublk_fill_io_cmd(io, cmd);
                ret = ublk_config_io_buf(ub, io, cmd, addr, &buf_idx);
-               compl = ublk_need_complete_req(ubq, io);
+               compl = ublk_need_complete_req(ub, io);
 
                /* can't touch 'ublk_io' any more */
                if (buf_idx != UBLK_INVALID_BUF_IDX)