summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_attr.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2007-10-27 13:37:17 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-01-11 18:22:31 -0600
commit7ee5d43e2ea25336a7638715420c75583bd2ed69 (patch)
tree2687f4508fa05465b231a61e606b1063c944d107 /drivers/scsi/lpfc/lpfc_attr.c
parent57127f157298ea2dacbbc878a3c5d2a5daca772c (diff)
[SCSI] lpfc 8.2.3 : NPIV bug fixes
NPIV bug fixes: - Remove vport params on physical hba when npiv is disabled - Implement new DA_ID CT command to remove vport information from the switch after delete. Some switches didn't clean this up unless the physical link dropped. Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_attr.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_attr.c81
1 files changed, 20 insertions, 61 deletions
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index bd35e9c7b99..356dede9cd6 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -1113,7 +1113,13 @@ MODULE_PARM_DESC(lpfc_sli_mode, "SLI mode selector:"
" 2 - select SLI-2 even on SLI-3 capable HBAs,"
" 3 - select SLI-3");
-LPFC_ATTR_R(enable_npiv, 0, 0, 1, "Enable NPIV functionality");
+int lpfc_enable_npiv = 0;
+module_param(lpfc_enable_npiv, int, 0);
+MODULE_PARM_DESC(lpfc_enable_npiv, "Enable NPIV functionality");
+lpfc_param_show(enable_npiv);
+lpfc_param_init(enable_npiv, 0, 0, 1);
+static CLASS_DEVICE_ATTR(lpfc_enable_npiv, S_IRUGO,
+ lpfc_enable_npiv_show, NULL);
/*
# lpfc_nodev_tmo: If set, it will hold all I/O errors on devices that disappear
@@ -1259,6 +1265,13 @@ LPFC_VPORT_ATTR_HEX_RW(log_verbose, 0x0, 0x0, 0xffff,
"Verbose logging bit-mask");
/*
+# lpfc_enable_da_id: This turns on the DA_ID CT command that deregisters
+# objects that have been registered with the nameserver after login.
+*/
+LPFC_VPORT_ATTR_R(enable_da_id, 0, 0, 1,
+ "Deregister nameserver objects before LOGO");
+
+/*
# lun_queue_depth: This parameter is used to limit the number of outstanding
# commands per FCP LUN. Value range is [1,128]. Default value is 30.
*/
@@ -1564,6 +1577,7 @@ struct class_device_attribute *lpfc_vport_attrs[] = {
&class_device_attr_lpfc_max_luns,
&class_device_attr_nport_evt_cnt,
&class_device_attr_npiv_info,
+ &class_device_attr_lpfc_enable_da_id,
NULL,
};
@@ -2349,69 +2363,13 @@ struct fc_function_template lpfc_transport_functions = {
.dev_loss_tmo_callbk = lpfc_dev_loss_tmo_callbk,
.terminate_rport_io = lpfc_terminate_rport_io,
- .vport_create = lpfc_vport_create,
- .vport_delete = lpfc_vport_delete,
+ /* Vport fields are filled in at runtime based on enable_npiv */
+ .vport_create = NULL,
+ .vport_delete = NULL,
+ .vport_disable = NULL,
.dd_fcvport_size = sizeof(struct lpfc_vport *),
};
-struct fc_function_template lpfc_vport_transport_functions = {
- /* fixed attributes the driver supports */
- .show_host_node_name = 1,
- .show_host_port_name = 1,
- .show_host_supported_classes = 1,
- .show_host_supported_fc4s = 1,
- .show_host_supported_speeds = 1,
- .show_host_maxframe_size = 1,
-
- /* dynamic attributes the driver supports */
- .get_host_port_id = lpfc_get_host_port_id,
- .show_host_port_id = 1,
-
- .get_host_port_type = lpfc_get_host_port_type,
- .show_host_port_type = 1,
-
- .get_host_port_state = lpfc_get_host_port_state,
- .show_host_port_state = 1,
-
- /* active_fc4s is shown but doesn't change (thus no get function) */
- .show_host_active_fc4s = 1,
-
- .get_host_speed = lpfc_get_host_speed,
- .show_host_speed = 1,
-
- .get_host_fabric_name = lpfc_get_host_fabric_name,
- .show_host_fabric_name = 1,
-
- /*
- * The LPFC driver treats linkdown handling as target loss events
- * so there are no sysfs handlers for link_down_tmo.
- */
-
- .get_fc_host_stats = lpfc_get_stats,
- .reset_fc_host_stats = lpfc_reset_stats,
-
- .dd_fcrport_size = sizeof(struct lpfc_rport_data),
- .show_rport_maxframe_size = 1,
- .show_rport_supported_classes = 1,
-
- .set_rport_dev_loss_tmo = lpfc_set_rport_loss_tmo,
- .show_rport_dev_loss_tmo = 1,
-
- .get_starget_port_id = lpfc_get_starget_port_id,
- .show_starget_port_id = 1,
-
- .get_starget_node_name = lpfc_get_starget_node_name,
- .show_starget_node_name = 1,
-
- .get_starget_port_name = lpfc_get_starget_port_name,
- .show_starget_port_name = 1,
-
- .dev_loss_tmo_callbk = lpfc_dev_loss_tmo_callbk,
- .terminate_rport_io = lpfc_terminate_rport_io,
-
- .vport_disable = lpfc_vport_disable,
-};
-
void
lpfc_get_cfgparam(struct lpfc_hba *phba)
{
@@ -2460,5 +2418,6 @@ lpfc_get_vport_cfgparam(struct lpfc_vport *vport)
lpfc_discovery_threads_init(vport, lpfc_discovery_threads);
lpfc_max_luns_init(vport, lpfc_max_luns);
lpfc_scan_down_init(vport, lpfc_scan_down);
+ lpfc_enable_da_id_init(vport, lpfc_enable_da_id);
return;
}