Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124685
b: refs/heads/master
c: 3623ecb
h: refs/heads/master
i:
  124683: efc4992
v: v3
  • Loading branch information
Christof Schmitt authored and James Bottomley committed Dec 29, 2008
1 parent a5a4a5a commit 646371d
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 55 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 06499fac65a273f1de0154679ab04f29dead2bba
refs/heads/master: 3623ecba19660d1d838f8b1a4d1e80007d603617
95 changes: 45 additions & 50 deletions trunk/drivers/s390/scsi/zfcp_aux.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,12 @@

#define ZFCP_BUS_ID_SIZE 20

static char *device;

MODULE_AUTHOR("IBM Deutschland Entwicklung GmbH - linux390@de.ibm.com");
MODULE_DESCRIPTION("FCP HBA driver");
MODULE_LICENSE("GPL");

module_param(device, charp, 0400);
static char *init_device;
module_param_named(device, init_device, charp, 0400);
MODULE_PARM_DESC(device, "specify initial device");

static int zfcp_reqlist_alloc(struct zfcp_adapter *adapter)
Expand Down Expand Up @@ -73,64 +72,25 @@ int zfcp_reqlist_isempty(struct zfcp_adapter *adapter)
return 1;
}

static int __init zfcp_device_setup(char *devstr)
{
char *token;
char *str;

if (!devstr)
return 0;

/* duplicate devstr and keep the original for sysfs presentation*/
str = kmalloc(strlen(devstr) + 1, GFP_KERNEL);
if (!str)
return 0;

strcpy(str, devstr);

token = strsep(&str, ",");
if (!token || strlen(token) >= ZFCP_BUS_ID_SIZE)
goto err_out;
strncpy(zfcp_data.init_busid, token, ZFCP_BUS_ID_SIZE);

token = strsep(&str, ",");
if (!token || strict_strtoull(token, 0,
(unsigned long long *) &zfcp_data.init_wwpn))
goto err_out;

token = strsep(&str, ",");
if (!token || strict_strtoull(token, 0,
(unsigned long long *) &zfcp_data.init_fcp_lun))
goto err_out;

kfree(str);
return 1;

err_out:
kfree(str);
pr_err("%s is not a valid SCSI device\n", devstr);
return 0;
}

static void __init zfcp_init_device_configure(void)
static void __init zfcp_init_device_configure(char *busid, u64 wwpn, u64 lun)
{
struct zfcp_adapter *adapter;
struct zfcp_port *port;
struct zfcp_unit *unit;

down(&zfcp_data.config_sema);
read_lock_irq(&zfcp_data.config_lock);
adapter = zfcp_get_adapter_by_busid(zfcp_data.init_busid);
adapter = zfcp_get_adapter_by_busid(busid);
if (adapter)
zfcp_adapter_get(adapter);
read_unlock_irq(&zfcp_data.config_lock);

if (!adapter)
goto out_adapter;
port = zfcp_port_enqueue(adapter, zfcp_data.init_wwpn, 0, 0);
port = zfcp_port_enqueue(adapter, wwpn, 0, 0);
if (IS_ERR(port))
goto out_port;
unit = zfcp_unit_enqueue(port, zfcp_data.init_fcp_lun);
unit = zfcp_unit_enqueue(port, lun);
if (IS_ERR(unit))
goto out_unit;
up(&zfcp_data.config_sema);
Expand Down Expand Up @@ -160,6 +120,42 @@ static struct kmem_cache *zfcp_cache_create(int size, char *name)
return kmem_cache_create(name , size, align, 0, NULL);
}

static void __init zfcp_init_device_setup(char *devstr)
{
char *token;
char *str;
char busid[ZFCP_BUS_ID_SIZE];
u64 wwpn, lun;

/* duplicate devstr and keep the original for sysfs presentation*/
str = kmalloc(strlen(devstr) + 1, GFP_KERNEL);
if (!str)
return;

strcpy(str, devstr);

token = strsep(&str, ",");
if (!token || strlen(token) >= ZFCP_BUS_ID_SIZE)
goto err_out;
strncpy(busid, token, ZFCP_BUS_ID_SIZE);

token = strsep(&str, ",");
if (!token || strict_strtoull(token, 0, (unsigned long long *) &wwpn))
goto err_out;

token = strsep(&str, ",");
if (!token || strict_strtoull(token, 0, (unsigned long long *) &lun))
goto err_out;

kfree(str);
zfcp_init_device_configure(busid, wwpn, lun);
return;

err_out:
kfree(str);
pr_err("%s is not a valid SCSI device\n", devstr);
}

static int __init zfcp_module_init(void)
{
int retval = -ENOMEM;
Expand Down Expand Up @@ -202,10 +198,9 @@ static int __init zfcp_module_init(void)
goto out_ccw_register;
}

if (zfcp_device_setup(device))
zfcp_init_device_configure();

goto out;
if (init_device)
zfcp_init_device_setup(init_device);
return 0;

out_ccw_register:
misc_deregister(&zfcp_cfdc_misc);
Expand Down
4 changes: 0 additions & 4 deletions trunk/drivers/s390/scsi/zfcp_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -597,10 +597,6 @@ struct zfcp_data {
lists */
struct semaphore config_sema; /* serialises configuration
changes */
atomic_t loglevel; /* current loglevel */
char init_busid[20];
u64 init_wwpn;
u64 init_fcp_lun;
struct kmem_cache *fsf_req_qtcb_cache;
struct kmem_cache *sr_buffer_cache;
struct kmem_cache *gid_pn_cache;
Expand Down

0 comments on commit 646371d

Please sign in to comment.