@@ -732,7 +732,6 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,
732732{
733733 struct qedi_work_map * work , * work_tmp ;
734734 u32 proto_itt = cqe -> itid ;
735- itt_t protoitt = 0 ;
736735 int found = 0 ;
737736 struct qedi_cmd * qedi_cmd = NULL ;
738737 u32 iscsi_cid ;
@@ -812,16 +811,12 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,
812811 return ;
813812
814813check_cleanup_reqs :
815- if (qedi_conn -> cmd_cleanup_req > 0 ) {
816- QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_TID ,
814+ if (atomic_inc_return (& qedi_conn -> cmd_cleanup_cmpl ) ==
815+ qedi_conn -> cmd_cleanup_req ) {
816+ QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_SCSI_TM ,
817817 "Freeing tid=0x%x for cid=0x%x\n" ,
818818 cqe -> itid , qedi_conn -> iscsi_conn_id );
819- qedi_conn -> cmd_cleanup_cmpl ++ ;
820819 wake_up (& qedi_conn -> wait_queue );
821- } else {
822- QEDI_ERR (& qedi -> dbg_ctx ,
823- "Delayed or untracked cleanup response, itt=0x%x, tid=0x%x, cid=0x%x\n" ,
824- protoitt , cqe -> itid , qedi_conn -> iscsi_conn_id );
825820 }
826821}
827822
@@ -1163,7 +1158,7 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
11631158 }
11641159
11651160 qedi_conn -> cmd_cleanup_req = 0 ;
1166- qedi_conn -> cmd_cleanup_cmpl = 0 ;
1161+ atomic_set ( & qedi_conn -> cmd_cleanup_cmpl , 0 ) ;
11671162
11681163 QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_SCSI_TM ,
11691164 "active_cmd_count=%d, cid=0x%x, in_recovery=%d, lun_reset=%d\n" ,
@@ -1215,16 +1210,15 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
12151210 qedi_conn -> iscsi_conn_id );
12161211
12171212 rval = wait_event_interruptible_timeout (qedi_conn -> wait_queue ,
1218- ((qedi_conn -> cmd_cleanup_req ==
1219- qedi_conn -> cmd_cleanup_cmpl ) ||
1220- test_bit (QEDI_IN_RECOVERY ,
1221- & qedi -> flags )),
1222- 5 * HZ );
1213+ (qedi_conn -> cmd_cleanup_req ==
1214+ atomic_read (& qedi_conn -> cmd_cleanup_cmpl )) ||
1215+ test_bit (QEDI_IN_RECOVERY , & qedi -> flags ),
1216+ 5 * HZ );
12231217 if (rval ) {
12241218 QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_SCSI_TM ,
12251219 "i/o cmd_cleanup_req=%d, equal to cmd_cleanup_cmpl=%d, cid=0x%x\n" ,
12261220 qedi_conn -> cmd_cleanup_req ,
1227- qedi_conn -> cmd_cleanup_cmpl ,
1221+ atomic_read ( & qedi_conn -> cmd_cleanup_cmpl ) ,
12281222 qedi_conn -> iscsi_conn_id );
12291223
12301224 return 0 ;
@@ -1233,7 +1227,7 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
12331227 QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_SCSI_TM ,
12341228 "i/o cmd_cleanup_req=%d, not equal to cmd_cleanup_cmpl=%d, cid=0x%x\n" ,
12351229 qedi_conn -> cmd_cleanup_req ,
1236- qedi_conn -> cmd_cleanup_cmpl ,
1230+ atomic_read ( & qedi_conn -> cmd_cleanup_cmpl ) ,
12371231 qedi_conn -> iscsi_conn_id );
12381232
12391233 iscsi_host_for_each_session (qedi -> shost ,
@@ -1242,11 +1236,10 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
12421236
12431237 /* Enable IOs for all other sessions except current.*/
12441238 if (!wait_event_interruptible_timeout (qedi_conn -> wait_queue ,
1245- (qedi_conn -> cmd_cleanup_req ==
1246- qedi_conn -> cmd_cleanup_cmpl ) ||
1247- test_bit (QEDI_IN_RECOVERY ,
1248- & qedi -> flags ),
1249- 5 * HZ )) {
1239+ (qedi_conn -> cmd_cleanup_req ==
1240+ atomic_read (& qedi_conn -> cmd_cleanup_cmpl )) ||
1241+ test_bit (QEDI_IN_RECOVERY , & qedi -> flags ),
1242+ 5 * HZ )) {
12501243 iscsi_host_for_each_session (qedi -> shost ,
12511244 qedi_mark_device_available );
12521245 return -1 ;
@@ -1266,7 +1259,7 @@ void qedi_clearsq(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
12661259
12671260 qedi_ep = qedi_conn -> ep ;
12681261 qedi_conn -> cmd_cleanup_req = 0 ;
1269- qedi_conn -> cmd_cleanup_cmpl = 0 ;
1262+ atomic_set ( & qedi_conn -> cmd_cleanup_cmpl , 0 ) ;
12701263
12711264 if (!qedi_ep ) {
12721265 QEDI_WARN (& qedi -> dbg_ctx ,
0 commit comments