lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.4 020/162] s390/dasd: Display read-only attribute correctly
    Date
    From: Jan Höppner <hoeppner@linux.vnet.ibm.com>

    [ Upstream commit b487a914f853545842a0899329b6b72fe56c4081 ]

    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>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/s390/block/dasd_devmap.c | 19 ++++++++++++++-----
    1 file changed, 14 insertions(+), 5 deletions(-)

    diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c
    index 8286f742436b..f61a8e0ae7c8 100644
    --- a/drivers/s390/block/dasd_devmap.c
    +++ b/drivers/s390/block/dasd_devmap.c
    @@ -758,13 +758,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");
    }

    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 03:37    [W:4.072 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site