| From e5f74d1a689a01d66d8e7e914af5a90a1cc6b864 Mon Sep 17 00:00:00 2001 |
| From: Quinn Tran <qutran@marvell.com> |
| Date: Thu, 12 Sep 2019 11:09:06 -0700 |
| Subject: [PATCH] scsi: qla2xxx: Fix unbound sleep in fcport delete path. |
| |
| commit c3b6a1d397420a0fdd97af2f06abfb78adc370df upstream. |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c |
| index e614415e0d72..b511af33832c 100644 |
| --- a/drivers/scsi/qla2xxx/qla_target.c |
| +++ b/drivers/scsi/qla2xxx/qla_target.c |
| @@ -1015,6 +1015,7 @@ void qlt_free_session_done(struct work_struct *work) |
| |
| if (logout_started) { |
| bool traced = false; |
| + u16 cnt = 0; |
| |
| while (!READ_ONCE(sess->logout_completed)) { |
| if (!traced) { |
| @@ -1024,6 +1025,9 @@ 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.7.4 |
| |