• Jan Höppner's avatar
    s390/dasd: Fix locking issue when changing RO attribute · 9f9d53e5
    Jan Höppner authored
    The function dasd_ro_store() calls set_disk_ro() to set the device in
    question read-only. Since set_disk_ro() might sleep, we can't call it
    while holding a lock. However, we also can't simply check if the device,
    block, and gdp references are valid before we call set_disk_ro() because
    an offline processing might have been started in the meanwhile which
    will destroy those references.
    
    In order to reliably call set_disk_ro() we have to ensure several
    things:
    
    - Still check validity of the mentioned references but additionally
      check if offline processing is running and bail out accordingly. Also,
      do this while holding the device lock.
    - To ensure that the block device is still safe after the lock, increase
      the open_count while still holding the device lock.
    Reviewed-by: default avatarStefan Haberland <sth@linux.vnet.ibm.com>
    Signed-off-by: default avatarJan Höppner <hoeppner@linux.vnet.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    9f9d53e5
dasd_devmap.c 37.1 KB