[S390] dasd PAV enabling.
authorHorst Hummel <horst.hummel@de.ibm.com>
Thu, 24 Aug 2006 11:22:36 +0000 (13:22 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 24 Aug 2006 11:22:36 +0000 (13:22 +0200)
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>
drivers/s390/block/dasd_devmap.c
drivers/s390/block/dasd_eckd.c

index 9d0c6e1a0e664a87beb7764eb32653ff8c1614fc..9af02c79ce8afdd03017cb7d53ba57812d92ccbd 100644 (file)
@@ -54,11 +54,11 @@ struct dasd_devmap {
  */
 struct dasd_server_ssid_map {
        struct list_head list;
-       struct server_id {
+       struct system_id {
                char vendor[4];
                char serial[15];
+               __u16 ssid;
        } sid;
-       __u16 ssid;
 };
 
 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;
        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;
+       srv->sid.ssid = uid->ssid;
 
        /* server is already contained ? */
        spin_lock(&dasd_devmap_lock);
        devmap->uid = *uid;
        list_for_each_entry(tmp, &dasd_server_ssid_list, list) {
                if (!memcmp(&srv->sid, &tmp->sid,
-                           sizeof(struct dasd_server_ssid_map))) {
+                           sizeof(struct system_id))) {
                        kfree(srv);
                        srv = NULL;
                        break;
index 957ed5db98e4de714fb84caf485a1b88d48e362a..b7a7fac3f7c3a05ae3448e5d172db199578a4dc6 100644 (file)
@@ -607,7 +607,7 @@ dasd_eckd_psf_ssc(struct dasd_device *device)
  * Valide storage server of current device.
  */
 static int
-dasd_eckd_validate_server(struct dasd_device *device)
+dasd_eckd_validate_server(struct dasd_device *device, struct dasd_uid *uid)
 {
        int rc;
 
@@ -616,11 +616,11 @@ dasd_eckd_validate_server(struct dasd_device *device)
                return 0;
 
        rc = dasd_eckd_psf_ssc(device);
-       if (rc)
-               /* may be requested feature is not available on server,
-                * therefore just report error and go ahead */
-               DEV_MESSAGE(KERN_INFO, device,
-                           "Perform Subsystem Function returned rc=%d", rc);
+       /* may be requested feature is not available on server,
+        * therefore just report error and go ahead */
+       DEV_MESSAGE(KERN_INFO, device,
+                   "PSF-SSC on storage subsystem %s.%s.%04x returned rc=%d",
+                   uid->vendor, uid->serial, uid->ssid, rc);
        /* RE-Read Configuration Data */
        return dasd_eckd_read_conf(device);
 }
@@ -666,7 +666,7 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
                return rc;
        rc = dasd_set_uid(device->cdev, &uid);
        if (rc == 1)    /* new server found */
-               rc = dasd_eckd_validate_server(device);
+               rc = dasd_eckd_validate_server(device, &uid);
        if (rc)
                return rc;