|
@@ -39,51 +39,6 @@ ZFCP_DEFINE_ADAPTER_ATTR(hardware_version, "0x%08x\n",
|
|
|
ZFCP_DEFINE_ADAPTER_ATTR(in_recovery, "%d\n", atomic_test_mask
|
|
|
(ZFCP_STATUS_COMMON_ERP_INUSE, &adapter->status));
|
|
|
|
|
|
-/**
|
|
|
- * zfcp_sysfs_port_add_store - add a port to sysfs tree
|
|
|
- * @dev: pointer to belonging device
|
|
|
- * @buf: pointer to input buffer
|
|
|
- * @count: number of bytes in buffer
|
|
|
- *
|
|
|
- * Store function of the "port_add" attribute of an adapter.
|
|
|
- */
|
|
|
-static ssize_t
|
|
|
-zfcp_sysfs_port_add_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
|
|
|
-{
|
|
|
- wwn_t wwpn;
|
|
|
- char *endp;
|
|
|
- struct zfcp_adapter *adapter;
|
|
|
- struct zfcp_port *port;
|
|
|
- int retval = -EINVAL;
|
|
|
-
|
|
|
- down(&zfcp_data.config_sema);
|
|
|
-
|
|
|
- adapter = dev_get_drvdata(dev);
|
|
|
- if (atomic_test_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status)) {
|
|
|
- retval = -EBUSY;
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
- wwpn = simple_strtoull(buf, &endp, 0);
|
|
|
- if ((endp + 1) < (buf + count))
|
|
|
- goto out;
|
|
|
-
|
|
|
- port = zfcp_port_enqueue(adapter, wwpn, 0, 0);
|
|
|
- if (!port)
|
|
|
- goto out;
|
|
|
-
|
|
|
- retval = 0;
|
|
|
-
|
|
|
- zfcp_erp_port_reopen(port, 0, 91, NULL);
|
|
|
- zfcp_erp_wait(port->adapter);
|
|
|
- zfcp_port_put(port);
|
|
|
- out:
|
|
|
- up(&zfcp_data.config_sema);
|
|
|
- return retval ? retval : (ssize_t) count;
|
|
|
-}
|
|
|
-
|
|
|
-static DEVICE_ATTR(port_add, S_IWUSR, NULL, zfcp_sysfs_port_add_store);
|
|
|
-
|
|
|
/**
|
|
|
* zfcp_sysfs_port_rescan - trigger manual port rescan
|
|
|
* @dev: pointer to belonging device
|
|
@@ -237,7 +192,6 @@ static struct attribute *zfcp_adapter_attrs[] = {
|
|
|
&dev_attr_failed.attr,
|
|
|
&dev_attr_in_recovery.attr,
|
|
|
&dev_attr_port_remove.attr,
|
|
|
- &dev_attr_port_add.attr,
|
|
|
&dev_attr_port_rescan.attr,
|
|
|
&dev_attr_peer_wwnn.attr,
|
|
|
&dev_attr_peer_wwpn.attr,
|