scsi: qla2xxx: Prevent PRLI in target mode
authorAnastasia Kovaleva <a.kovaleva@yadro.com>
Thu, 22 Apr 2021 15:34:14 +0000 (18:34 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 29 Apr 2021 02:55:01 +0000 (22:55 -0400)
In a case when the initiator in P2P mode by some circumstances does not
send PRLI, the target, in a case when the target port's WWPN is less than
initiator's, changes the discovery state in DSC_GNL. When gnl completes it
sends PRLI to the initiator.

Usually the initiator in P2P mode always sends PRLI. We caught this issue
on Linux stable v5.4.6 https://www.spinics.net/lists/stable/msg458515.html.

Fix this particular corner case in the behaviour of the P2P mod target
login state machine.

Link: https://lore.kernel.org/r/20210422153414.4022-1-a.kovaleva@yadro.com
Fixes: a9ed06d4e640 ("scsi: qla2xxx: Allow PLOGI in target mode")
Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Anastasia Kovaleva <a.kovaleva@yadro.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_init.c

index 9c5782e946e00ef6fb608ef0086d04236e2d8ef6..0de250570e3997958bc69afc0fa4aa44bb896b21 100644 (file)
@@ -1195,6 +1195,9 @@ static int qla24xx_post_prli_work(struct scsi_qla_host *vha, fc_port_t *fcport)
 {
        struct qla_work_evt *e;
 
+       if (vha->host->active_mode == MODE_TARGET)
+               return QLA_FUNCTION_FAILED;
+
        e = qla2x00_alloc_work(vha, QLA_EVT_PRLI);
        if (!e)
                return QLA_FUNCTION_FAILED;