Commit 8e79a441 authored by Horst Hummel's avatar Horst Hummel Committed by Martin Schwidefsky

[S390] dasd PAV enabling.

The subsystem check in the PAV code is incorrect, it enables PAV
per device instead of per subsystem.
Signed-off-by: default avatarHorst Hummel <horst.hummel@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent ef7d1b24
...@@ -54,11 +54,11 @@ struct dasd_devmap { ...@@ -54,11 +54,11 @@ struct dasd_devmap {
*/ */
struct dasd_server_ssid_map { struct dasd_server_ssid_map {
struct list_head list; struct list_head list;
struct server_id { struct system_id {
char vendor[4]; char vendor[4];
char serial[15]; char serial[15];
__u16 ssid;
} sid; } sid;
__u16 ssid;
}; };
static struct list_head dasd_server_ssid_list; static struct list_head dasd_server_ssid_list;
...@@ -904,14 +904,14 @@ dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid) ...@@ -904,14 +904,14 @@ dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)
return -ENOMEM; return -ENOMEM;
strncpy(srv->sid.vendor, uid->vendor, sizeof(srv->sid.vendor) - 1); strncpy(srv->sid.vendor, uid->vendor, sizeof(srv->sid.vendor) - 1);
strncpy(srv->sid.serial, uid->serial, sizeof(srv->sid.serial) - 1); strncpy(srv->sid.serial, uid->serial, sizeof(srv->sid.serial) - 1);
srv->ssid = uid->ssid; srv->sid.ssid = uid->ssid;
/* server is already contained ? */ /* server is already contained ? */
spin_lock(&dasd_devmap_lock); spin_lock(&dasd_devmap_lock);
devmap->uid = *uid; devmap->uid = *uid;
list_for_each_entry(tmp, &dasd_server_ssid_list, list) { list_for_each_entry(tmp, &dasd_server_ssid_list, list) {
if (!memcmp(&srv->sid, &tmp->sid, if (!memcmp(&srv->sid, &tmp->sid,
sizeof(struct dasd_server_ssid_map))) { sizeof(struct system_id))) {
kfree(srv); kfree(srv);
srv = NULL; srv = NULL;
break; break;
......
...@@ -607,7 +607,7 @@ dasd_eckd_psf_ssc(struct dasd_device *device) ...@@ -607,7 +607,7 @@ dasd_eckd_psf_ssc(struct dasd_device *device)
* Valide storage server of current device. * Valide storage server of current device.
*/ */
static int static int
dasd_eckd_validate_server(struct dasd_device *device) dasd_eckd_validate_server(struct dasd_device *device, struct dasd_uid *uid)
{ {
int rc; int rc;
...@@ -616,11 +616,11 @@ dasd_eckd_validate_server(struct dasd_device *device) ...@@ -616,11 +616,11 @@ dasd_eckd_validate_server(struct dasd_device *device)
return 0; return 0;
rc = dasd_eckd_psf_ssc(device); rc = dasd_eckd_psf_ssc(device);
if (rc) /* may be requested feature is not available on server,
/* may be requested feature is not available on server, * therefore just report error and go ahead */
* therefore just report error and go ahead */ DEV_MESSAGE(KERN_INFO, device,
DEV_MESSAGE(KERN_INFO, device, "PSF-SSC on storage subsystem %s.%s.%04x returned rc=%d",
"Perform Subsystem Function returned rc=%d", rc); uid->vendor, uid->serial, uid->ssid, rc);
/* RE-Read Configuration Data */ /* RE-Read Configuration Data */
return dasd_eckd_read_conf(device); return dasd_eckd_read_conf(device);
} }
...@@ -666,7 +666,7 @@ dasd_eckd_check_characteristics(struct dasd_device *device) ...@@ -666,7 +666,7 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
return rc; return rc;
rc = dasd_set_uid(device->cdev, &uid); rc = dasd_set_uid(device->cdev, &uid);
if (rc == 1) /* new server found */ if (rc == 1) /* new server found */
rc = dasd_eckd_validate_server(device); rc = dasd_eckd_validate_server(device, &uid);
if (rc) if (rc)
return rc; return rc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment