@@ -715,7 +715,8 @@ static void __ublk_fail_req(struct ublk_queue *ubq, struct ublk_io *io,
715
715
}
716
716
}
717
717
718
- static void ubq_complete_io_cmd (struct ublk_io * io , int res )
718
+ static void ubq_complete_io_cmd (struct ublk_io * io , int res ,
719
+ unsigned issue_flags )
719
720
{
720
721
/* mark this cmd owned by ublksrv */
721
722
io -> flags |= UBLK_IO_FLAG_OWNED_BY_SRV ;
@@ -727,7 +728,7 @@ static void ubq_complete_io_cmd(struct ublk_io *io, int res)
727
728
io -> flags &= ~UBLK_IO_FLAG_ACTIVE ;
728
729
729
730
/* tell ublksrv one io request is coming */
730
- io_uring_cmd_done (io -> cmd , res , 0 );
731
+ io_uring_cmd_done (io -> cmd , res , 0 , issue_flags );
731
732
}
732
733
733
734
#define UBLK_REQUEUE_DELAY_MS 3
@@ -744,7 +745,8 @@ static inline void __ublk_abort_rq(struct ublk_queue *ubq,
744
745
mod_delayed_work (system_wq , & ubq -> dev -> monitor_work , 0 );
745
746
}
746
747
747
- static inline void __ublk_rq_task_work (struct request * req )
748
+ static inline void __ublk_rq_task_work (struct request * req ,
749
+ unsigned issue_flags )
748
750
{
749
751
struct ublk_queue * ubq = req -> mq_hctx -> driver_data ;
750
752
int tag = req -> tag ;
@@ -782,7 +784,7 @@ static inline void __ublk_rq_task_work(struct request *req)
782
784
pr_devel ("%s: need get data. op %d, qid %d tag %d io_flags %x\n" ,
783
785
__func__ , io -> cmd -> cmd_op , ubq -> q_id ,
784
786
req -> tag , io -> flags );
785
- ubq_complete_io_cmd (io , UBLK_IO_RES_NEED_GET_DATA );
787
+ ubq_complete_io_cmd (io , UBLK_IO_RES_NEED_GET_DATA , issue_flags );
786
788
return ;
787
789
}
788
790
/*
@@ -820,17 +822,18 @@ static inline void __ublk_rq_task_work(struct request *req)
820
822
mapped_bytes >> 9 ;
821
823
}
822
824
823
- ubq_complete_io_cmd (io , UBLK_IO_RES_OK );
825
+ ubq_complete_io_cmd (io , UBLK_IO_RES_OK , issue_flags );
824
826
}
825
827
826
- static inline void ublk_forward_io_cmds (struct ublk_queue * ubq )
828
+ static inline void ublk_forward_io_cmds (struct ublk_queue * ubq ,
829
+ unsigned issue_flags )
827
830
{
828
831
struct llist_node * io_cmds = llist_del_all (& ubq -> io_cmds );
829
832
struct ublk_rq_data * data , * tmp ;
830
833
831
834
io_cmds = llist_reverse_order (io_cmds );
832
835
llist_for_each_entry_safe (data , tmp , io_cmds , node )
833
- __ublk_rq_task_work (blk_mq_rq_from_pdu (data ));
836
+ __ublk_rq_task_work (blk_mq_rq_from_pdu (data ), issue_flags );
834
837
}
835
838
836
839
static inline void ublk_abort_io_cmds (struct ublk_queue * ubq )
@@ -842,12 +845,12 @@ static inline void ublk_abort_io_cmds(struct ublk_queue *ubq)
842
845
__ublk_abort_rq (ubq , blk_mq_rq_from_pdu (data ));
843
846
}
844
847
845
- static void ublk_rq_task_work_cb (struct io_uring_cmd * cmd )
848
+ static void ublk_rq_task_work_cb (struct io_uring_cmd * cmd , unsigned issue_flags )
846
849
{
847
850
struct ublk_uring_cmd_pdu * pdu = ublk_get_uring_cmd_pdu (cmd );
848
851
struct ublk_queue * ubq = pdu -> ubq ;
849
852
850
- ublk_forward_io_cmds (ubq );
853
+ ublk_forward_io_cmds (ubq , issue_flags );
851
854
}
852
855
853
856
static void ublk_rq_task_work_fn (struct callback_head * work )
@@ -856,8 +859,9 @@ static void ublk_rq_task_work_fn(struct callback_head *work)
856
859
struct ublk_rq_data , work );
857
860
struct request * req = blk_mq_rq_from_pdu (data );
858
861
struct ublk_queue * ubq = req -> mq_hctx -> driver_data ;
862
+ unsigned issue_flags = IO_URING_F_UNLOCKED ;
859
863
860
- ublk_forward_io_cmds (ubq );
864
+ ublk_forward_io_cmds (ubq , issue_flags );
861
865
}
862
866
863
867
static void ublk_queue_cmd (struct ublk_queue * ubq , struct request * rq )
@@ -1111,7 +1115,8 @@ static void ublk_cancel_queue(struct ublk_queue *ubq)
1111
1115
struct ublk_io * io = & ubq -> ios [i ];
1112
1116
1113
1117
if (io -> flags & UBLK_IO_FLAG_ACTIVE )
1114
- io_uring_cmd_done (io -> cmd , UBLK_IO_RES_ABORT , 0 );
1118
+ io_uring_cmd_done (io -> cmd , UBLK_IO_RES_ABORT , 0 ,
1119
+ IO_URING_F_UNLOCKED );
1115
1120
}
1116
1121
1117
1122
/* all io commands are canceled */
@@ -1351,7 +1356,7 @@ static int ublk_ch_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags)
1351
1356
return - EIOCBQUEUED ;
1352
1357
1353
1358
out :
1354
- io_uring_cmd_done (cmd , ret , 0 );
1359
+ io_uring_cmd_done (cmd , ret , 0 , issue_flags );
1355
1360
pr_devel ("%s: complete: cmd op %d, tag %d ret %x io_flags %x\n" ,
1356
1361
__func__ , cmd_op , tag , ret , io -> flags );
1357
1362
return - EIOCBQUEUED ;
@@ -2234,7 +2239,7 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd,
2234
2239
if (ub )
2235
2240
ublk_put_device (ub );
2236
2241
out :
2237
- io_uring_cmd_done (cmd , ret , 0 );
2242
+ io_uring_cmd_done (cmd , ret , 0 , issue_flags );
2238
2243
pr_devel ("%s: cmd done ret %d cmd_op %x, dev id %d qid %d\n" ,
2239
2244
__func__ , ret , cmd -> cmd_op , header -> dev_id , header -> queue_id );
2240
2245
return - EIOCBQUEUED ;
0 commit comments