@@ -1035,7 +1035,7 @@ static int ublk_ch_mmap(struct file *filp, struct vm_area_struct *vma)
10351035}
10361036
10371037static void ublk_commit_completion (struct ublk_device * ub ,
1038- struct ublksrv_io_cmd * ub_cmd )
1038+ const struct ublksrv_io_cmd * ub_cmd )
10391039{
10401040 u32 qid = ub_cmd -> q_id , tag = ub_cmd -> tag ;
10411041 struct ublk_queue * ubq = ublk_get_queue (ub , qid );
@@ -1292,7 +1292,7 @@ static inline int ublk_check_cmd_op(u32 cmd_op)
12921292
12931293static int __ublk_ch_uring_cmd (struct io_uring_cmd * cmd ,
12941294 unsigned int issue_flags ,
1295- struct ublksrv_io_cmd * ub_cmd )
1295+ const struct ublksrv_io_cmd * ub_cmd )
12961296{
12971297 struct ublk_device * ub = cmd -> file -> private_data ;
12981298 struct ublk_queue * ubq ;
@@ -1399,17 +1399,17 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd,
13991399
14001400static int ublk_ch_uring_cmd (struct io_uring_cmd * cmd , unsigned int issue_flags )
14011401{
1402- struct ublksrv_io_cmd * ub_src = (struct ublksrv_io_cmd * ) cmd -> cmd ;
1403- struct ublksrv_io_cmd ub_cmd ;
1404-
14051402 /*
14061403 * Not necessary for async retry, but let's keep it simple and always
14071404 * copy the values to avoid any potential reuse.
14081405 */
1409- ub_cmd .q_id = READ_ONCE (ub_src -> q_id );
1410- ub_cmd .tag = READ_ONCE (ub_src -> tag );
1411- ub_cmd .result = READ_ONCE (ub_src -> result );
1412- ub_cmd .addr = READ_ONCE (ub_src -> addr );
1406+ const struct ublksrv_io_cmd * ub_src = io_uring_sqe_cmd (cmd -> sqe );
1407+ const struct ublksrv_io_cmd ub_cmd = {
1408+ .q_id = READ_ONCE (ub_src -> q_id ),
1409+ .tag = READ_ONCE (ub_src -> tag ),
1410+ .result = READ_ONCE (ub_src -> result ),
1411+ .addr = READ_ONCE (ub_src -> addr )
1412+ };
14131413
14141414 return __ublk_ch_uring_cmd (cmd , issue_flags , & ub_cmd );
14151415}
@@ -1619,7 +1619,7 @@ static struct ublk_device *ublk_get_device_from_id(int idx)
16191619
16201620static int ublk_ctrl_start_dev (struct ublk_device * ub , struct io_uring_cmd * cmd )
16211621{
1622- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
1622+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
16231623 int ublksrv_pid = (int )header -> data [0 ];
16241624 struct gendisk * disk ;
16251625 int ret = - EINVAL ;
@@ -1682,7 +1682,7 @@ static int ublk_ctrl_start_dev(struct ublk_device *ub, struct io_uring_cmd *cmd)
16821682static int ublk_ctrl_get_queue_affinity (struct ublk_device * ub ,
16831683 struct io_uring_cmd * cmd )
16841684{
1685- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
1685+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
16861686 void __user * argp = (void __user * )(unsigned long )header -> addr ;
16871687 cpumask_var_t cpumask ;
16881688 unsigned long queue ;
@@ -1733,7 +1733,7 @@ static inline void ublk_dump_dev_info(struct ublksrv_ctrl_dev_info *info)
17331733
17341734static int ublk_ctrl_add_dev (struct io_uring_cmd * cmd )
17351735{
1736- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
1736+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
17371737 void __user * argp = (void __user * )(unsigned long )header -> addr ;
17381738 struct ublksrv_ctrl_dev_info info ;
17391739 struct ublk_device * ub ;
@@ -1910,7 +1910,7 @@ static int ublk_ctrl_del_dev(struct ublk_device **p_ub)
19101910
19111911static inline void ublk_ctrl_cmd_dump (struct io_uring_cmd * cmd )
19121912{
1913- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
1913+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
19141914
19151915 pr_devel ("%s: cmd_op %x, dev id %d qid %d data %llx buf %llx len %u\n" ,
19161916 __func__ , cmd -> cmd_op , header -> dev_id , header -> queue_id ,
@@ -1929,7 +1929,7 @@ static int ublk_ctrl_stop_dev(struct ublk_device *ub)
19291929static int ublk_ctrl_get_dev_info (struct ublk_device * ub ,
19301930 struct io_uring_cmd * cmd )
19311931{
1932- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
1932+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
19331933 void __user * argp = (void __user * )(unsigned long )header -> addr ;
19341934
19351935 if (header -> len < sizeof (struct ublksrv_ctrl_dev_info ) || !header -> addr )
@@ -1960,7 +1960,7 @@ static void ublk_ctrl_fill_params_devt(struct ublk_device *ub)
19601960static int ublk_ctrl_get_params (struct ublk_device * ub ,
19611961 struct io_uring_cmd * cmd )
19621962{
1963- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
1963+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
19641964 void __user * argp = (void __user * )(unsigned long )header -> addr ;
19651965 struct ublk_params_header ph ;
19661966 int ret ;
@@ -1991,7 +1991,7 @@ static int ublk_ctrl_get_params(struct ublk_device *ub,
19911991static int ublk_ctrl_set_params (struct ublk_device * ub ,
19921992 struct io_uring_cmd * cmd )
19931993{
1994- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
1994+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
19951995 void __user * argp = (void __user * )(unsigned long )header -> addr ;
19961996 struct ublk_params_header ph ;
19971997 int ret = - EFAULT ;
@@ -2052,7 +2052,7 @@ static void ublk_queue_reinit(struct ublk_device *ub, struct ublk_queue *ubq)
20522052static int ublk_ctrl_start_recovery (struct ublk_device * ub ,
20532053 struct io_uring_cmd * cmd )
20542054{
2055- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
2055+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
20562056 int ret = - EINVAL ;
20572057 int i ;
20582058
@@ -2094,7 +2094,7 @@ static int ublk_ctrl_start_recovery(struct ublk_device *ub,
20942094static int ublk_ctrl_end_recovery (struct ublk_device * ub ,
20952095 struct io_uring_cmd * cmd )
20962096{
2097- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
2097+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
20982098 int ublksrv_pid = (int )header -> data [0 ];
20992099 int ret = - EINVAL ;
21002100
@@ -2161,7 +2161,7 @@ static int ublk_char_dev_permission(struct ublk_device *ub,
21612161static int ublk_ctrl_uring_cmd_permission (struct ublk_device * ub ,
21622162 struct io_uring_cmd * cmd )
21632163{
2164- struct ublksrv_ctrl_cmd * header = (struct ublksrv_ctrl_cmd * )cmd -> cmd ;
2164+ struct ublksrv_ctrl_cmd * header = (struct ublksrv_ctrl_cmd * )io_uring_sqe_cmd ( cmd -> sqe ) ;
21652165 bool unprivileged = ub -> dev_info .flags & UBLK_F_UNPRIVILEGED_DEV ;
21662166 void __user * argp = (void __user * )(unsigned long )header -> addr ;
21672167 char * dev_path = NULL ;
@@ -2240,7 +2240,7 @@ static int ublk_ctrl_uring_cmd_permission(struct ublk_device *ub,
22402240static int ublk_ctrl_uring_cmd (struct io_uring_cmd * cmd ,
22412241 unsigned int issue_flags )
22422242{
2243- struct ublksrv_ctrl_cmd * header = ( struct ublksrv_ctrl_cmd * ) cmd -> cmd ;
2243+ const struct ublksrv_ctrl_cmd * header = io_uring_sqe_cmd ( cmd -> sqe ) ;
22442244 struct ublk_device * ub = NULL ;
22452245 u32 cmd_op = cmd -> cmd_op ;
22462246 int ret = - EINVAL ;
0 commit comments