]> git.baikalelectronics.ru Git - kernel.git/commitdiff
scsi: qla2xxx: Fix N2N inconsistent PLOGI
authorQuinn Tran <qutran@marvell.com>
Thu, 10 Mar 2022 09:25:57 +0000 (01:25 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 15 Mar 2022 04:29:14 +0000 (00:29 -0400)
For N2N topology, ELS Passthrough is used to send PLOGI. On failure of ELS
pass through PLOGI, driver flipped over to using LLIOCB PLOGI for N2N. This
is not consistent. Delete the session to restart the connection where ELS
pass through PLOGI would be used consistently.

Link: https://lore.kernel.org/r/20220310092604.22950-7-njavali@marvell.com
Fixes: 2c1a9358222a ("scsi: qla2xxx: Add error handling for PLOGI ELS passthrough")
Cc: stable@vger.kernel.org
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_iocb.c

index 5e3ee1f7b43cf1542f239d0a10dffa4a456b4648..e0fe9ddb4bd2cea4b15b7ffc1c4d55551ddd4887 100644 (file)
@@ -2958,6 +2958,7 @@ static void qla2x00_els_dcmd2_sp_done(srb_t *sp, int res)
                                        set_bit(ISP_ABORT_NEEDED,
                                            &vha->dpc_flags);
                                        qla2xxx_wake_dpc(vha);
+                                       break;
                                }
                                fallthrough;
                        default:
@@ -2967,9 +2968,7 @@ static void qla2x00_els_dcmd2_sp_done(srb_t *sp, int res)
                                    fw_status[0], fw_status[1], fw_status[2]);
 
                                fcport->flags &= ~FCF_ASYNC_SENT;
-                               qla2x00_set_fcport_disc_state(fcport,
-                                   DSC_LOGIN_FAILED);
-                               set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
+                               qlt_schedule_sess_for_deletion(fcport);
                                break;
                        }
                        break;
@@ -2981,8 +2980,7 @@ static void qla2x00_els_dcmd2_sp_done(srb_t *sp, int res)
                            fw_status[0], fw_status[1], fw_status[2]);
 
                        sp->fcport->flags &= ~FCF_ASYNC_SENT;
-                       qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_FAILED);
-                       set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
+                       qlt_schedule_sess_for_deletion(fcport);
                        break;
                }