ublk: pass ublksrv_ctrl_cmd * instead of io_uring_cmd *
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>
This commit is contained in:
committed by
Jens Axboe
parent
18461f2a02
commit
843c6cec1a
+19
-27
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user