]> www.infradead.org Git - nvme.git/commitdiff
ublk: pass ublksrv_ctrl_cmd * instead of io_uring_cmd *
authorCaleb Sander Mateos <csander@purestorage.com>
Wed, 9 Apr 2025 01:29:26 +0000 (19:29 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 9 Apr 2025 13:58:04 +0000 (07:58 -0600)
The ublk_ctrl_*() handlers all take struct io_uring_cmd *cmd but only
use it to get struct ublksrv_ctrl_cmd *header from the io_uring SQE.
Since the caller ublk_ctrl_uring_cmd() has already computed header, pass
it instead of cmd.

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Link: https://lore.kernel.org/r/20250409012928.3527198-1-csander@purestorage.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c

index d6ca2f1097ad913759f1f660983c1423695c5fb2..cdb1543fa4a9817aa2ca2fca66720f589cf222be 100644 (file)
@@ -2436,9 +2436,9 @@ static struct ublk_device *ublk_get_device_from_id(int idx)
        return ub;
 }
 
-static int ublk_ctrl_start_dev(struct ublk_device *ub, struct io_uring_cmd *cmd)
+static int ublk_ctrl_start_dev(struct ublk_device *ub,
+               const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        const struct ublk_param_basic *p = &ub->params.basic;
        int ublksrv_pid = (int)header->data[0];
        struct queue_limits lim = {
@@ -2557,9 +2557,8 @@ out_unlock:
 }
 
 static int ublk_ctrl_get_queue_affinity(struct ublk_device *ub,
-               struct io_uring_cmd *cmd)
+               const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        void __user *argp = (void __user *)(unsigned long)header->addr;
        cpumask_var_t cpumask;
        unsigned long queue;
@@ -2608,9 +2607,8 @@ static inline void ublk_dump_dev_info(struct ublksrv_ctrl_dev_info *info)
                        info->nr_hw_queues, info->queue_depth);
 }
 
-static int ublk_ctrl_add_dev(struct io_uring_cmd *cmd)
+static int ublk_ctrl_add_dev(const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        void __user *argp = (void __user *)(unsigned long)header->addr;
        struct ublksrv_ctrl_dev_info info;
        struct ublk_device *ub;
@@ -2835,9 +2833,8 @@ static int ublk_ctrl_stop_dev(struct ublk_device *ub)
 }
 
 static int ublk_ctrl_get_dev_info(struct ublk_device *ub,
-               struct io_uring_cmd *cmd)
+               const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        void __user *argp = (void __user *)(unsigned long)header->addr;
 
        if (header->len < sizeof(struct ublksrv_ctrl_dev_info) || !header->addr)
@@ -2866,9 +2863,8 @@ static void ublk_ctrl_fill_params_devt(struct ublk_device *ub)
 }
 
 static int ublk_ctrl_get_params(struct ublk_device *ub,
-               struct io_uring_cmd *cmd)
+               const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        void __user *argp = (void __user *)(unsigned long)header->addr;
        struct ublk_params_header ph;
        int ret;
@@ -2897,9 +2893,8 @@ static int ublk_ctrl_get_params(struct ublk_device *ub,
 }
 
 static int ublk_ctrl_set_params(struct ublk_device *ub,
-               struct io_uring_cmd *cmd)
+               const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        void __user *argp = (void __user *)(unsigned long)header->addr;
        struct ublk_params_header ph;
        int ret = -EFAULT;
@@ -2963,9 +2958,8 @@ static void ublk_queue_reinit(struct ublk_device *ub, struct ublk_queue *ubq)
 }
 
 static int ublk_ctrl_start_recovery(struct ublk_device *ub,
-               struct io_uring_cmd *cmd)
+               const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        int ret = -EINVAL;
        int i;
 
@@ -3011,9 +3005,8 @@ static int ublk_ctrl_start_recovery(struct ublk_device *ub,
 }
 
 static int ublk_ctrl_end_recovery(struct ublk_device *ub,
-               struct io_uring_cmd *cmd)
+               const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        int ublksrv_pid = (int)header->data[0];
        int ret = -EINVAL;
        int i;
@@ -3060,9 +3053,8 @@ static int ublk_ctrl_end_recovery(struct ublk_device *ub,
        return ret;
 }
 
-static int ublk_ctrl_get_features(struct io_uring_cmd *cmd)
+static int ublk_ctrl_get_features(const struct ublksrv_ctrl_cmd *header)
 {
-       const struct ublksrv_ctrl_cmd *header = io_uring_sqe_cmd(cmd->sqe);
        void __user *argp = (void __user *)(unsigned long)header->addr;
        u64 features = UBLK_F_ALL;
 
@@ -3201,7 +3193,7 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd,
                goto out;
 
        if (cmd_op == UBLK_U_CMD_GET_FEATURES) {
-               ret = ublk_ctrl_get_features(cmd);
+               ret = ublk_ctrl_get_features(header);
                goto out;
        }
 
@@ -3218,17 +3210,17 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd,
 
        switch (_IOC_NR(cmd_op)) {
        case UBLK_CMD_START_DEV:
-               ret = ublk_ctrl_start_dev(ub, cmd);
+               ret = ublk_ctrl_start_dev(ub, header);
                break;
        case UBLK_CMD_STOP_DEV:
                ret = ublk_ctrl_stop_dev(ub);
                break;
        case UBLK_CMD_GET_DEV_INFO:
        case UBLK_CMD_GET_DEV_INFO2:
-               ret = ublk_ctrl_get_dev_info(ub, cmd);
+               ret = ublk_ctrl_get_dev_info(ub, header);
                break;
        case UBLK_CMD_ADD_DEV:
-               ret = ublk_ctrl_add_dev(cmd);
+               ret = ublk_ctrl_add_dev(header);
                break;
        case UBLK_CMD_DEL_DEV:
                ret = ublk_ctrl_del_dev(&ub, true);
@@ -3237,19 +3229,19 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd,
                ret = ublk_ctrl_del_dev(&ub, false);
                break;
        case UBLK_CMD_GET_QUEUE_AFFINITY:
-               ret = ublk_ctrl_get_queue_affinity(ub, cmd);
+               ret = ublk_ctrl_get_queue_affinity(ub, header);
                break;
        case UBLK_CMD_GET_PARAMS:
-               ret = ublk_ctrl_get_params(ub, cmd);
+               ret = ublk_ctrl_get_params(ub, header);
                break;
        case UBLK_CMD_SET_PARAMS:
-               ret = ublk_ctrl_set_params(ub, cmd);
+               ret = ublk_ctrl_set_params(ub, header);
                break;
        case UBLK_CMD_START_USER_RECOVERY:
-               ret = ublk_ctrl_start_recovery(ub, cmd);
+               ret = ublk_ctrl_start_recovery(ub, header);
                break;
        case UBLK_CMD_END_USER_RECOVERY:
-               ret = ublk_ctrl_end_recovery(ub, cmd);
+               ret = ublk_ctrl_end_recovery(ub, header);
                break;
        default:
                ret = -EOPNOTSUPP;