aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren Trapp <darren.trapp@cavium.com>2018-02-27 19:31:12 -0500
committerMartin K. Petersen <martin.petersen@oracle.com>2018-03-01 20:16:53 -0500
commit2b5b96473efceb755d7700d47982370d49e8815f (patch)
treeba5a4edff500228208392960aafd051c98ef6b8c
parente39a97353e5378eb46bf01679799c5704d397f32 (diff)
scsi: qla2xxx: Fix FC-NVMe LUN discovery
commit a4239945b8ad ("scsi: qla2xxx: Add switch command to simplify fabric discovery") introduced regression when it did not consider FC-NVMe code path which broke NVMe LUN discovery. Fixes: a4239945b8ad ("scsi: qla2xxx: Add switch command to simplify fabric discovery") Signed-off-by: Darren Trapp <darren.trapp@cavium.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h1
-rw-r--r--drivers/scsi/qla2xxx/qla_gs.c3
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c8
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c7
4 files changed, 16 insertions, 3 deletions
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index 3ca4b6a5eddd..c9689f97c307 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2217,6 +2217,7 @@ typedef struct {
2217 2217
2218/* FCP-4 types */ 2218/* FCP-4 types */
2219#define FC4_TYPE_FCP_SCSI 0x08 2219#define FC4_TYPE_FCP_SCSI 0x08
2220#define FC4_TYPE_NVME 0x28
2220#define FC4_TYPE_OTHER 0x0 2221#define FC4_TYPE_OTHER 0x0
2221#define FC4_TYPE_UNKNOWN 0xff 2222#define FC4_TYPE_UNKNOWN 0xff
2222 2223
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
index 21eff2d30266..403fa096f8c8 100644
--- a/drivers/scsi/qla2xxx/qla_gs.c
+++ b/drivers/scsi/qla2xxx/qla_gs.c
@@ -3973,6 +3973,9 @@ out:
3973 spin_lock_irqsave(&vha->work_lock, flags); 3973 spin_lock_irqsave(&vha->work_lock, flags);
3974 vha->scan.scan_flags &= ~SF_SCANNING; 3974 vha->scan.scan_flags &= ~SF_SCANNING;
3975 spin_unlock_irqrestore(&vha->work_lock, flags); 3975 spin_unlock_irqrestore(&vha->work_lock, flags);
3976
3977 if ((fc4type == FC4_TYPE_FCP_SCSI) && vha->flags.nvme_enabled)
3978 qla24xx_async_gpnft(vha, FC4_TYPE_NVME);
3976} 3979}
3977 3980
3978static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res) 3981static void qla2x00_async_gpnft_gnnft_sp_done(void *s, int res)
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index d5a45c4981ec..00329dda6179 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -1061,6 +1061,7 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
1061 fc_port_t *fcport = ea->fcport; 1061 fc_port_t *fcport = ea->fcport;
1062 struct port_database_24xx *pd; 1062 struct port_database_24xx *pd;
1063 struct srb *sp = ea->sp; 1063 struct srb *sp = ea->sp;
1064 uint8_t ls;
1064 1065
1065 pd = (struct port_database_24xx *)sp->u.iocb_cmd.u.mbx.in; 1066 pd = (struct port_database_24xx *)sp->u.iocb_cmd.u.mbx.in;
1066 1067
@@ -1073,7 +1074,12 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
1073 if (fcport->disc_state == DSC_DELETE_PEND) 1074 if (fcport->disc_state == DSC_DELETE_PEND)
1074 return; 1075 return;
1075 1076
1076 switch (pd->current_login_state) { 1077 if (fcport->fc4f_nvme)
1078 ls = pd->current_login_state >> 4;
1079 else
1080 ls = pd->current_login_state & 0xf;
1081
1082 switch (ls) {
1077 case PDS_PRLI_COMPLETE: 1083 case PDS_PRLI_COMPLETE:
1078 __qla24xx_parse_gpdb(vha, fcport, pd); 1084 __qla24xx_parse_gpdb(vha, fcport, pd);
1079 break; 1085 break;
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 585f37155f29..285911e81728 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -4807,9 +4807,12 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
4807 fcport->d_id = e->u.new_sess.id; 4807 fcport->d_id = e->u.new_sess.id;
4808 fcport->flags |= FCF_FABRIC_DEVICE; 4808 fcport->flags |= FCF_FABRIC_DEVICE;
4809 fcport->fw_login_state = DSC_LS_PLOGI_PEND; 4809 fcport->fw_login_state = DSC_LS_PLOGI_PEND;
4810 if (e->u.new_sess.fc4_type == FC4_TYPE_FCP_SCSI) 4810 if (e->u.new_sess.fc4_type == FC4_TYPE_FCP_SCSI) {
4811 fcport->fc4_type = FC4_TYPE_FCP_SCSI; 4811 fcport->fc4_type = FC4_TYPE_FCP_SCSI;
4812 4812 } else if (e->u.new_sess.fc4_type == FC4_TYPE_NVME) {
4813 fcport->fc4_type = FC4_TYPE_OTHER;
4814 fcport->fc4f_nvme = FC4_TYPE_NVME;
4815 }
4813 memcpy(fcport->port_name, e->u.new_sess.port_name, 4816 memcpy(fcport->port_name, e->u.new_sess.port_name,
4814 WWN_SIZE); 4817 WWN_SIZE);
4815 } else { 4818 } else {