static void __init zfcp_init_device_configure(char *busid, u64 wwpn, u64 lun) { struct ccw_device *cdev; struct zfcp_adapter *adapter; struct zfcp_port *port; cdev = get_ccwdev_by_busid(&zfcp_ccw_driver, busid); if (!cdev) return; if (ccw_device_set_online(cdev)) goto out_ccw_device; adapter = zfcp_ccw_adapter_by_cdev(cdev); if (!adapter) goto out_ccw_device; port = zfcp_get_port_by_wwpn(adapter, wwpn); if (!port) goto out_port; flush_work(&port->rport_work); zfcp_unit_add(port, lun); put_device(&port->dev); out_port: zfcp_ccw_adapter_put(adapter); out_ccw_device: put_device(&cdev->dev); return; }
static ssize_t zfcp_sysfs_unit_add_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct zfcp_port *port = container_of(dev, struct zfcp_port, dev); u64 fcp_lun; if (strict_strtoull(buf, 0, (unsigned long long *) &fcp_lun)) return -EINVAL; if (zfcp_unit_add(port, fcp_lun)) return -EINVAL; return count; }