Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 33375
b: refs/heads/master
c: b18a60e
h: refs/heads/master
i:
  33373: 67ac6f9
  33371: 8c2a0e2
  33367: 3a4d8dd
  33359: 1c1fc2a
  33343: cca5cbe
v: v3
  • Loading branch information
Peter Oberparleiter authored and Martin Schwidefsky committed Aug 16, 2006
1 parent 50b11d4 commit 1985793
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 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: 2f6c55fc3109bcfa1bb1a112c825e07212c20f37
refs/heads/master: b18a60e7c2a7f2a17dbd57885621a42d546e2f7d
32 changes: 18 additions & 14 deletions trunk/drivers/s390/block/dasd_devmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,20 @@ struct dasd_devmap {
};

/*
* dasd_servermap is used to store the server_id of all storage servers
* accessed by DASD device driver.
* dasd_server_ssid_map contains a globally unique storage server subsystem ID.
* dasd_server_ssid_list contains the list of all subsystem IDs accessed by
* the DASD device driver.
*/
struct dasd_servermap {
struct dasd_server_ssid_map {
struct list_head list;
struct server_id {
char vendor[4];
char serial[15];
} sid;
__u16 ssid;
};

static struct list_head dasd_serverlist;
static struct list_head dasd_server_ssid_list;

/*
* Parameter parsing functions for dasd= parameter. The syntax is:
Expand Down Expand Up @@ -878,8 +880,9 @@ dasd_get_uid(struct ccw_device *cdev, struct dasd_uid *uid)

/*
* Register the given device unique identifier into devmap struct.
* In addition check if the related storage server is already contained in the
* dasd_serverlist. If server is not contained, create new entry.
* In addition check if the related storage server subsystem ID is already
* contained in the dasd_server_ssid_list. If subsystem ID is not contained,
* create new entry.
* Return 0 if server was already in serverlist,
* 1 if the server was added successful
* <0 in case of error.
Expand All @@ -888,26 +891,27 @@ int
dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)
{
struct dasd_devmap *devmap;
struct dasd_servermap *srv, *tmp;
struct dasd_server_ssid_map *srv, *tmp;

devmap = dasd_find_busid(cdev->dev.bus_id);
if (IS_ERR(devmap))
return PTR_ERR(devmap);

/* generate entry for servermap */
srv = (struct dasd_servermap *)
kzalloc(sizeof(struct dasd_servermap), GFP_KERNEL);
/* generate entry for server_ssid_map */
srv = (struct dasd_server_ssid_map *)
kzalloc(sizeof(struct dasd_server_ssid_map), GFP_KERNEL);
if (!srv)
return -ENOMEM;
strncpy(srv->sid.vendor, uid->vendor, sizeof(srv->sid.vendor) - 1);
strncpy(srv->sid.serial, uid->serial, sizeof(srv->sid.serial) - 1);
srv->ssid = uid->ssid;

/* server is already contained ? */
spin_lock(&dasd_devmap_lock);
devmap->uid = *uid;
list_for_each_entry(tmp, &dasd_serverlist, list) {
list_for_each_entry(tmp, &dasd_server_ssid_list, list) {
if (!memcmp(&srv->sid, &tmp->sid,
sizeof(struct dasd_servermap))) {
sizeof(struct dasd_server_ssid_map))) {
kfree(srv);
srv = NULL;
break;
Expand All @@ -916,7 +920,7 @@ dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)

/* add servermap to serverlist */
if (srv)
list_add(&srv->list, &dasd_serverlist);
list_add(&srv->list, &dasd_server_ssid_list);
spin_unlock(&dasd_devmap_lock);

return (srv ? 1 : 0);
Expand Down Expand Up @@ -987,7 +991,7 @@ dasd_devmap_init(void)
INIT_LIST_HEAD(&dasd_hashlists[i]);

/* Initialize servermap structure. */
INIT_LIST_HEAD(&dasd_serverlist);
INIT_LIST_HEAD(&dasd_server_ssid_list);
return 0;
}

Expand Down

0 comments on commit 1985793

Please sign in to comment.