scsi: qla2xxx: edif: Do secure PLOGI when auth app is present
authorQuinn Tran <qutran@marvell.com>
Tue, 17 Aug 2021 05:13:09 +0000 (22:13 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 24 Aug 2021 02:36:53 +0000 (22:36 -0400)
For initiator mode, always do secure login when authentication app started.
Also remove redundant flags to indicate secure connection.

Link: https://lore.kernel.org/r/20210817051315.2477-7-njavali@marvell.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_def.h
drivers/scsi/qla2xxx/qla_edif.c
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_iocb.c
drivers/scsi/qla2xxx/qla_target.c

index 031107b..ddc6932 100644 (file)
@@ -2620,7 +2620,6 @@ typedef struct fc_port {
                uint32_t        enable:1;       /* device is edif enabled/req'd */
                uint32_t        app_stop:2;
                uint32_t        app_started:1;
-               uint32_t        secured_login:1;
                uint32_t        aes_gmac:1;
                uint32_t        app_sess_online:1;
                uint32_t        tx_sa_set:1;
@@ -2631,7 +2630,6 @@ typedef struct fc_port {
                uint32_t        rx_rekey_cnt;
                uint64_t        tx_bytes;
                uint64_t        rx_bytes;
-               uint8_t         non_secured_login;
                uint8_t         auth_state;
                uint16_t        authok:1;
                uint16_t        rekey_cnt;
index bb5cda8..dc10874 100644 (file)
@@ -568,7 +568,7 @@ qla_edif_app_start(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
 
                        if (atomic_read(&vha->loop_state) == LOOP_DOWN)
                                break;
-                       if (!fcport->edif.secured_login)
+                       if (!(fcport->flags & FCF_FCSP_DEVICE))
                                continue;
 
                        fcport->edif.app_started = 1;
@@ -647,7 +647,7 @@ qla_edif_app_stop(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
        qla_edb_stop(vha);          /* stop db */
 
        list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) {
-               if (fcport->edif.non_secured_login)
+               if (!(fcport->flags & FCF_FCSP_DEVICE))
                        continue;
 
                if (fcport->flags & FCF_FCSP_DEVICE) {
@@ -948,7 +948,7 @@ qla_edif_app_getfcinfo(scsi_qla_host_t *vha, struct bsg_job *bsg_job)
                        ql_dbg(ql_dbg_edif, vha, 0x2058,
                            "Found FC_SP fcport - nn %8phN pn %8phN pcnt %d portid=%06x secure %d.\n",
                            fcport->node_name, fcport->port_name, pcnt,
-                           fcport->d_id.b24, fcport->edif.secured_login);
+                           fcport->d_id.b24, fcport->flags & FCF_FCSP_DEVICE);
 
                        switch (fcport->edif.auth_state) {
                        case VND_CMD_AUTH_STATE_ELS_RCVD:
index 4c5acfd..7e6fb4a 100644 (file)
@@ -1435,18 +1435,15 @@ static int      qla_chk_secure_login(scsi_qla_host_t    *vha, fc_port_t *fcport,
                ql_dbg(ql_dbg_disc, vha, 0x104d,
                    "Secure Login established on %8phC\n",
                    fcport->port_name);
-               fcport->edif.secured_login = 1;
-               fcport->edif.non_secured_login = 0;
                fcport->flags |= FCF_FCSP_DEVICE;
        } else {
                ql_dbg(ql_dbg_disc, vha, 0x104d,
                    "non-Secure Login %8phC",
                    fcport->port_name);
-               fcport->edif.secured_login = 0;
-               fcport->edif.non_secured_login = 1;
+               fcport->flags &= ~FCF_FCSP_DEVICE;
        }
        if (vha->hw->flags.edif_enabled) {
-               if (fcport->edif.secured_login) {
+               if (fcport->flags & FCF_FCSP_DEVICE) {
                        qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_AUTH_PEND);
                        /* Start edif prli timer & ring doorbell for app */
                        fcport->edif.rx_sa_set = 0;
index eef1fa2..9d4ad1d 100644 (file)
@@ -1552,6 +1552,9 @@ qla24xx_start_scsi(srb_t *sp)
        struct scsi_qla_host *vha = sp->vha;
        struct qla_hw_data *ha = vha->hw;
 
+       if (sp->fcport->edif.enable  && (sp->fcport->flags & FCF_FCSP_DEVICE))
+               return qla28xx_start_scsi_edif(sp);
+
        /* Setup device pointers. */
        req = vha->req;
        rsp = req->rsp;
@@ -1910,7 +1913,7 @@ qla2xxx_start_scsi_mq(srb_t *sp)
        struct qla_hw_data *ha = vha->hw;
        struct qla_qpair *qpair = sp->qpair;
 
-       if (sp->fcport->edif.enable)
+       if (sp->fcport->edif.enable && (sp->fcport->flags & FCF_FCSP_DEVICE))
                return qla28xx_start_scsi_edif(sp);
 
        /* Acquire qpair specific lock */
index 2f4da88..b3478ed 100644 (file)
@@ -636,10 +636,8 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport,
                fcport->fw_login_state = DSC_LS_PLOGI_PEND;
                c = "PLOGI";
                if (vha->hw->flags.edif_enabled &&
-                   (le16_to_cpu(ntfy->u.isp24.flags) & NOTIFY24XX_FLAGS_FCSP)) {
+                   (le16_to_cpu(ntfy->u.isp24.flags) & NOTIFY24XX_FLAGS_FCSP))
                        fcport->flags |= FCF_FCSP_DEVICE;
-                       fcport->edif.secured_login = 1;
-               }
                break;
        case SRB_NACK_PRLI:
                fcport->fw_login_state = DSC_LS_PRLI_PEND;