]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
s390/dasd: Display read-only attribute correctly
authorJan Höppner <hoeppner@linux.vnet.ibm.com>
Tue, 23 May 2017 14:17:30 +0000 (16:17 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 12 Jun 2017 14:26:00 +0000 (16:26 +0200)
We have two flags, DASD_FLAG_DEVICE_RO and DASD_FEATURE_READONLY, that
tell us whether a device is read-only. DASD_FLAG_DEVICE_RO is set when a
device is attached as read-only to z/VM and DASD_FEATURE_READONLY is set
when either the corresponding kernel parameter is configured, or the
read-only state is changed via sysfs.
This is valuable information in any case. However, only the feature flag
is being checked at the moment when we display the current state.

Fix this by checking both flags.

Reviewed-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/block/dasd_devmap.c

index 05e5762d045e377ebfa291f0b03cd064d1dfc690..0ce84f0a4d7f33aeb5fce16bc40254d7f606c523 100644 (file)
@@ -748,13 +748,22 @@ static ssize_t
 dasd_ro_show(struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct dasd_devmap *devmap;
-       int ro_flag;
+       struct dasd_device *device;
+       int ro_flag = 0;
 
        devmap = dasd_find_busid(dev_name(dev));
-       if (!IS_ERR(devmap))
-               ro_flag = (devmap->features & DASD_FEATURE_READONLY) != 0;
-       else
-               ro_flag = (DASD_FEATURE_DEFAULT & DASD_FEATURE_READONLY) != 0;
+       if (IS_ERR(devmap))
+               goto out;
+
+       ro_flag = !!(devmap->features & DASD_FEATURE_READONLY);
+
+       spin_lock(&dasd_devmap_lock);
+       device = devmap->device;
+       if (device)
+               ro_flag |= test_bit(DASD_FLAG_DEVICE_RO, &device->flags);
+       spin_unlock(&dasd_devmap_lock);
+
+out:
        return snprintf(buf, PAGE_SIZE, ro_flag ? "1\n" : "0\n");
 }