Skip to content

Commit 49d7bd3

Browse files
Mikhail Malyginmartinkpetersen
authored andcommitted
scsi: qla2xxx: Spinlock recursion in qla_target
The patch reverts changes done in qlt_schedule_sess_for_deletion() to avoid spinlock recursion sess->vha->work_lock should be used instead of ha->tgt.sess_lock, that can be locked in callers: qlt_reset() or qlt_handle_login() [mkp: roll in build warning reported by sfr] Fixes: 1c6cacf ("scsi: qla2xxx: Fixup locking for session deletion") Cc: <[email protected]> #v4.17 Signed-off-by: Mikhail Malygin <[email protected]> Reported-by: Mikhail Malygin <[email protected]> Tested-by: Mikhail Malygin <[email protected]> Acked-by: Himanshu Madhani <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent f2233a3 commit 49d7bd3

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

drivers/scsi/qla2xxx/qla_target.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,7 +1224,6 @@ static void qla24xx_chk_fcp_state(struct fc_port *sess)
12241224
void qlt_schedule_sess_for_deletion(struct fc_port *sess)
12251225
{
12261226
struct qla_tgt *tgt = sess->tgt;
1227-
struct qla_hw_data *ha = sess->vha->hw;
12281227
unsigned long flags;
12291228

12301229
if (sess->disc_state == DSC_DELETE_PEND)
@@ -1241,16 +1240,16 @@ void qlt_schedule_sess_for_deletion(struct fc_port *sess)
12411240
return;
12421241
}
12431242

1244-
spin_lock_irqsave(&ha->tgt.sess_lock, flags);
12451243
if (sess->deleted == QLA_SESS_DELETED)
12461244
sess->logout_on_delete = 0;
12471245

1246+
spin_lock_irqsave(&sess->vha->work_lock, flags);
12481247
if (sess->deleted == QLA_SESS_DELETION_IN_PROGRESS) {
1249-
spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
1248+
spin_unlock_irqrestore(&sess->vha->work_lock, flags);
12501249
return;
12511250
}
12521251
sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;
1253-
spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
1252+
spin_unlock_irqrestore(&sess->vha->work_lock, flags);
12541253

12551254
sess->disc_state = DSC_DELETE_PEND;
12561255

0 commit comments

Comments
 (0)