@@ -732,7 +732,6 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,
732
732
{
733
733
struct qedi_work_map * work , * work_tmp ;
734
734
u32 proto_itt = cqe -> itid ;
735
- itt_t protoitt = 0 ;
736
735
int found = 0 ;
737
736
struct qedi_cmd * qedi_cmd = NULL ;
738
737
u32 iscsi_cid ;
@@ -812,16 +811,12 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,
812
811
return ;
813
812
814
813
check_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 ,
817
817
"Freeing tid=0x%x for cid=0x%x\n" ,
818
818
cqe -> itid , qedi_conn -> iscsi_conn_id );
819
- qedi_conn -> cmd_cleanup_cmpl ++ ;
820
819
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 );
825
820
}
826
821
}
827
822
@@ -1163,7 +1158,7 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
1163
1158
}
1164
1159
1165
1160
qedi_conn -> cmd_cleanup_req = 0 ;
1166
- qedi_conn -> cmd_cleanup_cmpl = 0 ;
1161
+ atomic_set ( & qedi_conn -> cmd_cleanup_cmpl , 0 ) ;
1167
1162
1168
1163
QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_SCSI_TM ,
1169
1164
"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,
1215
1210
qedi_conn -> iscsi_conn_id );
1216
1211
1217
1212
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 );
1223
1217
if (rval ) {
1224
1218
QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_SCSI_TM ,
1225
1219
"i/o cmd_cleanup_req=%d, equal to cmd_cleanup_cmpl=%d, cid=0x%x\n" ,
1226
1220
qedi_conn -> cmd_cleanup_req ,
1227
- qedi_conn -> cmd_cleanup_cmpl ,
1221
+ atomic_read ( & qedi_conn -> cmd_cleanup_cmpl ) ,
1228
1222
qedi_conn -> iscsi_conn_id );
1229
1223
1230
1224
return 0 ;
@@ -1233,7 +1227,7 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
1233
1227
QEDI_INFO (& qedi -> dbg_ctx , QEDI_LOG_SCSI_TM ,
1234
1228
"i/o cmd_cleanup_req=%d, not equal to cmd_cleanup_cmpl=%d, cid=0x%x\n" ,
1235
1229
qedi_conn -> cmd_cleanup_req ,
1236
- qedi_conn -> cmd_cleanup_cmpl ,
1230
+ atomic_read ( & qedi_conn -> cmd_cleanup_cmpl ) ,
1237
1231
qedi_conn -> iscsi_conn_id );
1238
1232
1239
1233
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,
1242
1236
1243
1237
/* Enable IOs for all other sessions except current.*/
1244
1238
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 )) {
1250
1243
iscsi_host_for_each_session (qedi -> shost ,
1251
1244
qedi_mark_device_available );
1252
1245
return -1 ;
@@ -1266,7 +1259,7 @@ void qedi_clearsq(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
1266
1259
1267
1260
qedi_ep = qedi_conn -> ep ;
1268
1261
qedi_conn -> cmd_cleanup_req = 0 ;
1269
- qedi_conn -> cmd_cleanup_cmpl = 0 ;
1262
+ atomic_set ( & qedi_conn -> cmd_cleanup_cmpl , 0 ) ;
1270
1263
1271
1264
if (!qedi_ep ) {
1272
1265
QEDI_WARN (& qedi -> dbg_ctx ,
0 commit comments