aboutsummaryrefslogtreecommitdiffstats
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 19:22:31 -0500
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 bd35e9c7b995..356dede9cd65 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:"
1113 " 2 - select SLI-2 even on SLI-3 capable HBAs," 1113 " 2 - select SLI-2 even on SLI-3 capable HBAs,"
1114 " 3 - select SLI-3"); 1114 " 3 - select SLI-3");
1115 1115
1116LPFC_ATTR_R(enable_npiv, 0, 0, 1, "Enable NPIV functionality"); 1116int lpfc_enable_npiv = 0;
1117module_param(lpfc_enable_npiv, int, 0);
1118MODULE_PARM_DESC(lpfc_enable_npiv, "Enable NPIV functionality");
1119lpfc_param_show(enable_npiv);
1120lpfc_param_init(enable_npiv, 0, 0, 1);
1121static CLASS_DEVICE_ATTR(lpfc_enable_npiv, S_IRUGO,
1122 lpfc_enable_npiv_show, NULL);
1117 1123
1118/* 1124/*
1119# lpfc_nodev_tmo: If set, it will hold all I/O errors on devices that disappear 1125# 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,
1259 "Verbose logging bit-mask"); 1265 "Verbose logging bit-mask");
1260 1266
1261/* 1267/*
1268# lpfc_enable_da_id: This turns on the DA_ID CT command that deregisters
1269# objects that have been registered with the nameserver after login.
1270*/
1271LPFC_VPORT_ATTR_R(enable_da_id, 0, 0, 1,
1272 "Deregister nameserver objects before LOGO");
1273
1274/*
1262# lun_queue_depth: This parameter is used to limit the number of outstanding 1275# lun_queue_depth: This parameter is used to limit the number of outstanding
1263# commands per FCP LUN. Value range is [1,128]. Default value is 30. 1276# commands per FCP LUN. Value range is [1,128]. Default value is 30.
1264*/ 1277*/
@@ -1564,6 +1577,7 @@ struct class_device_attribute *lpfc_vport_attrs[] = {
1564 &class_device_attr_lpfc_max_luns, 1577 &class_device_attr_lpfc_max_luns,
1565 &class_device_attr_nport_evt_cnt, 1578 &class_device_attr_nport_evt_cnt,
1566 &class_device_attr_npiv_info, 1579 &class_device_attr_npiv_info,
1580 &class_device_attr_lpfc_enable_da_id,
1567 NULL, 1581 NULL,
1568}; 1582};
1569 1583
@@ -2349,69 +2363,13 @@ struct fc_function_template lpfc_transport_functions = {
2349 .dev_loss_tmo_callbk = lpfc_dev_loss_tmo_callbk, 2363 .dev_loss_tmo_callbk = lpfc_dev_loss_tmo_callbk,
2350 .terminate_rport_io = lpfc_terminate_rport_io, 2364 .terminate_rport_io = lpfc_terminate_rport_io,
2351 2365
2352 .vport_create = lpfc_vport_create, 2366 /* Vport fields are filled in at runtime based on enable_npiv */
2353 .vport_delete = lpfc_vport_delete, 2367 .vport_create = NULL,
2368 .vport_delete = NULL,
2369 .vport_disable = NULL,
2354 .dd_fcvport_size = sizeof(struct lpfc_vport *), 2370 .dd_fcvport_size = sizeof(struct lpfc_vport *),
2355}; 2371};
2356 2372
2357struct fc_function_template lpfc_vport_transport_functions = {
2358 /* fixed attributes the driver supports */
2359 .show_host_node_name = 1,
2360 .show_host_port_name = 1,
2361 .show_host_supported_classes = 1,
2362 .show_host_supported_fc4s = 1,
2363 .show_host_supported_speeds = 1,
2364 .show_host_maxframe_size = 1,
2365
2366 /* dynamic attributes the driver supports */
2367 .get_host_port_id = lpfc_get_host_port_id,
2368 .show_host_port_id = 1,
2369
2370 .get_host_port_type = lpfc_get_host_port_type,
2371 .show_host_port_type = 1,
2372
2373 .get_host_port_state = lpfc_get_host_port_state,
2374 .show_host_port_state = 1,
2375
2376 /* active_fc4s is shown but doesn't change (thus no get function) */
2377 .show_host_active_fc4s = 1,
2378
2379 .get_host_speed = lpfc_get_host_speed,
2380 .show_host_speed = 1,
2381
2382 .get_host_fabric_name = lpfc_get_host_fabric_name,
2383 .show_host_fabric_name = 1,
2384
2385 /*
2386 * The LPFC driver treats linkdown handling as target loss events
2387 * so there are no sysfs handlers for link_down_tmo.
2388 */
2389
2390 .get_fc_host_stats = lpfc_get_stats,
2391 .reset_fc_host_stats = lpfc_reset_stats,
2392
2393 .dd_fcrport_size = sizeof(struct lpfc_rport_data),
2394 .show_rport_maxframe_size = 1,
2395 .show_rport_supported_classes = 1,
2396
2397 .set_rport_dev_loss_tmo = lpfc_set_rport_loss_tmo,
2398 .show_rport_dev_loss_tmo = 1,
2399
2400 .get_starget_port_id = lpfc_get_starget_port_id,
2401 .show_starget_port_id = 1,
2402
2403 .get_starget_node_name = lpfc_get_starget_node_name,
2404 .show_starget_node_name = 1,
2405
2406 .get_starget_port_name = lpfc_get_starget_port_name,
2407 .show_starget_port_name = 1,
2408
2409 .dev_loss_tmo_callbk = lpfc_dev_loss_tmo_callbk,
2410 .terminate_rport_io = lpfc_terminate_rport_io,
2411
2412 .vport_disable = lpfc_vport_disable,
2413};
2414
2415void 2373void
2416lpfc_get_cfgparam(struct lpfc_hba *phba) 2374lpfc_get_cfgparam(struct lpfc_hba *phba)
2417{ 2375{
@@ -2460,5 +2418,6 @@ lpfc_get_vport_cfgparam(struct lpfc_vport *vport)
2460 lpfc_discovery_threads_init(vport, lpfc_discovery_threads); 2418 lpfc_discovery_threads_init(vport, lpfc_discovery_threads);
2461 lpfc_max_luns_init(vport, lpfc_max_luns); 2419 lpfc_max_luns_init(vport, lpfc_max_luns);
2462 lpfc_scan_down_init(vport, lpfc_scan_down); 2420 lpfc_scan_down_init(vport, lpfc_scan_down);
2421 lpfc_enable_da_id_init(vport, lpfc_enable_da_id);
2463 return; 2422 return;
2464} 2423}