• Sebastian Ott's avatar
    [S390] dasd: fix refcounting in dasd_change_state · 181d9522
    Sebastian Ott authored
    To set a dasd online dasd_change_state is called twice. The first
    cycle will schedule initial analysis of the device, set the rc to
    -EAGAIN and will not touch the device state any more.
    The initial analysis will in turn call dasd_change_state to increase
    the state to the final DASD_STATE_ONLINE.
    
    If the dasd_change_state on the second thread outruns the other one
    both finish with the state set to DASD_STATE_ONLINE and the device
    refcount will be decreased by 2.
    
    Fix this by leaving dasd_change_state on rc == -EAGAIN so that the
    refcount will always be decreased by 1.
    Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    181d9522
dasd.c 71.1 KB