| From f624279cdacc542cc7b001c2ee3e7e84af06f9a3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 12 Sep 2019 11:09:06 -0700 |
| Subject: scsi: qla2xxx: Fix unbound sleep in fcport delete path. |
| |
| From: Quinn Tran <qutran@marvell.com> |
| |
| [ Upstream commit c3b6a1d397420a0fdd97af2f06abfb78adc370df ] |
| |
| There are instances, though rare, where a LOGO request cannot be sent out |
| and the thread in free session done can wait indefinitely. Fix this by |
| putting an upper bound to sleep. |
| |
| Link: https://lore.kernel.org/r/20190912180918.6436-3-hmadhani@marvell.com |
| Signed-off-by: Quinn Tran <qutran@marvell.com> |
| Signed-off-by: Himanshu Madhani <hmadhani@marvell.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/qla2xxx/qla_target.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c |
| index 87e04c4a49821..11753ed3433ca 100644 |
| --- a/drivers/scsi/qla2xxx/qla_target.c |
| +++ b/drivers/scsi/qla2xxx/qla_target.c |
| @@ -996,6 +996,7 @@ static void qlt_free_session_done(struct work_struct *work) |
| |
| if (logout_started) { |
| bool traced = false; |
| + u16 cnt = 0; |
| |
| while (!ACCESS_ONCE(sess->logout_completed)) { |
| if (!traced) { |
| @@ -1005,6 +1006,9 @@ static void qlt_free_session_done(struct work_struct *work) |
| traced = true; |
| } |
| msleep(100); |
| + cnt++; |
| + if (cnt > 200) |
| + break; |
| } |
| |
| ql_dbg(ql_dbg_disc, vha, 0xf087, |
| -- |
| 2.20.1 |
| |