forked from Minki/linux
[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: Horst Hummel <horst.hummel@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
ef7d1b244f
commit
8e79a441a4
@ -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)
|
|||||||
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)
|
|||||||
* 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)
|
|||||||
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)
|
|||||||
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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user