| From b4712eb18c3b4e2bd56d41a5c7d0a969af4888eb Mon Sep 17 00:00:00 2001 |
| From: Roman Bolshakov <r.bolshakov@yadro.com> |
| Date: Mon, 25 Nov 2019 19:56:58 +0300 |
| Subject: [PATCH] scsi: qla2xxx: Configure local loop for N2N target |
| |
| commit fd1de5830a5abaf444cc4312871e02c41e24fdc1 upstream. |
| |
| qla2x00_configure_local_loop initializes PLOGI payload for PLOGI ELS using |
| Get Parameters mailbox command. |
| |
| In the case when the driver is running in target mode, the topology is N2N |
| and the target port has higher WWPN, LOCAL_LOOP_UPDATE bit is cleared too |
| early and PLOGI payload is not initialized by the Get Parameters |
| command. That causes a failure of ELS IOCB carrying the PLOGI with 0x15 aka |
| Data Underrun error. |
| |
| LOCAL_LOOP_UPDATE has to be set to initialize PLOGI payload. |
| |
| Fixes: 48acad099074 ("scsi: qla2xxx: Fix N2N link re-connect") |
| Link: https://lore.kernel.org/r/20191125165702.1013-10-r.bolshakov@yadro.com |
| Acked-by: Quinn Tran <qutran@marvell.com> |
| Acked-by: Himanshu Madhani <hmadhani@marvell.com> |
| Reviewed-by: Hannes Reinecke <hare@suse.de> |
| Tested-by: Hannes Reinecke <hare@suse.de> |
| Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.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_init.c b/drivers/scsi/qla2xxx/qla_init.c |
| index 9091d37ffd95..c6715ceae976 100644 |
| --- a/drivers/scsi/qla2xxx/qla_init.c |
| +++ b/drivers/scsi/qla2xxx/qla_init.c |
| @@ -4974,14 +4974,8 @@ qla2x00_configure_loop(scsi_qla_host_t *vha) |
| set_bit(RSCN_UPDATE, &flags); |
| clear_bit(LOCAL_LOOP_UPDATE, &flags); |
| |
| - } else if (ha->current_topology == ISP_CFG_N) { |
| - clear_bit(RSCN_UPDATE, &flags); |
| - if (qla_tgt_mode_enabled(vha)) { |
| - /* allow the other side to start the login */ |
| - clear_bit(LOCAL_LOOP_UPDATE, &flags); |
| - set_bit(RELOGIN_NEEDED, &vha->dpc_flags); |
| - } |
| - } else if (ha->current_topology == ISP_CFG_NL) { |
| + } else if (ha->current_topology == ISP_CFG_NL || |
| + ha->current_topology == ISP_CFG_N) { |
| clear_bit(RSCN_UPDATE, &flags); |
| set_bit(LOCAL_LOOP_UPDATE, &flags); |
| } else if (!vha->flags.online || |
| -- |
| 2.7.4 |
| |