diff mbox series

[1/2] qla2xxx: Fix device staying in blocked state

Message ID 20190423215236.13664-2-hmadhani@marvell.com (mailing list archive)
State Mainlined
Commit 2137490f2147a8d0799b72b9a1023efb012d40c7
Headers show
Series qla2xxx: Minor fixes | expand

Commit Message

Himanshu Madhani April 23, 2019, 9:52 p.m. UTC
From: Quinn Tran <qtran@marvell.com>

This patch fixes issue reported by some of the customers,
who discovered that after cable pull scenario the devices
disappear and path seems to remain in blocked state. Once
the device reappears, driver does not seem to update path
to online. This issue appears because of the defer flag
creating race condition where the same session reappears.
This patch fixes this issue by indicating SCSI-ML of device
lost when qlt_free_session_done() is called from qlt_unreg_sess().

Fixes: 41dc529a4602a ("qla2xxx: Improve RSCN handling in driver")
Signed-off-by: Quinn Tran <qtran@marvell.com>
Cc: stable@vger.kernel.org #4.19
Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
---
 drivers/scsi/qla2xxx/qla_target.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Ewan Milne April 26, 2019, 8:14 p.m. UTC | #1
On Tue, 2019-04-23 at 14:52 -0700, Himanshu Madhani wrote:
> From: Quinn Tran <qtran@marvell.com>
> 
> This patch fixes issue reported by some of the customers,
> who discovered that after cable pull scenario the devices
> disappear and path seems to remain in blocked state. Once
> the device reappears, driver does not seem to update path
> to online. This issue appears because of the defer flag
> creating race condition where the same session reappears.
> This patch fixes this issue by indicating SCSI-ML of device
> lost when qlt_free_session_done() is called from qlt_unreg_sess().
> 
> Fixes: 41dc529a4602a ("qla2xxx: Improve RSCN handling in driver")
> Signed-off-by: Quinn Tran <qtran@marvell.com>
> Cc: stable@vger.kernel.org #4.19
> Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
> ---
>  drivers/scsi/qla2xxx/qla_target.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
> index 57cdd762230d..fc8914dd9dde 100644
> --- a/drivers/scsi/qla2xxx/qla_target.c
> +++ b/drivers/scsi/qla2xxx/qla_target.c
> @@ -982,6 +982,8 @@ void qlt_free_session_done(struct work_struct *work)
>  		sess->send_els_logo);
>  
>  	if (!IS_SW_RESV_ADDR(sess->d_id)) {
> +		qla2x00_mark_device_lost(vha, sess, 0, 0);
> +
>  		if (sess->send_els_logo) {
>  			qlt_port_logo_t logo;
>  
> @@ -1163,8 +1165,6 @@ void qlt_unreg_sess(struct fc_port *sess)
>  	if (sess->se_sess)
>  		vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess);
>  
> -	qla2x00_mark_device_lost(vha, sess, 0, 0);
> -
>  	sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;
>  	sess->disc_state = DSC_DELETE_PEND;
>  	sess->last_rscn_gen = sess->rscn_gen;

Reviewed-by: Ewan D. Milne <emilne@redhat.com>
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 57cdd762230d..fc8914dd9dde 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -982,6 +982,8 @@  void qlt_free_session_done(struct work_struct *work)
 		sess->send_els_logo);
 
 	if (!IS_SW_RESV_ADDR(sess->d_id)) {
+		qla2x00_mark_device_lost(vha, sess, 0, 0);
+
 		if (sess->send_els_logo) {
 			qlt_port_logo_t logo;
 
@@ -1163,8 +1165,6 @@  void qlt_unreg_sess(struct fc_port *sess)
 	if (sess->se_sess)
 		vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess);
 
-	qla2x00_mark_device_lost(vha, sess, 0, 0);
-
 	sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;
 	sess->disc_state = DSC_DELETE_PEND;
 	sess->last_rscn_gen = sess->rscn_gen;