• Bob Liu's avatar
    drivers: xen-blkfront: only talk_to_blkback() when in XenbusStateInitialising · a9b54bb9
    Bob Liu authored
    Patch 69b91ede
    "drivers: xen-blkback: delay pending_req allocation to connect_ring"
    exposed an problem that Xen blkfront has. There is a race
    with XenStored and the drivers such that we can see two:
    
    vbd vbd-268440320: blkfront:blkback_changed to state 2.
    vbd vbd-268440320: blkfront:blkback_changed to state 2.
    vbd vbd-268440320: blkfront:blkback_changed to state 4.
    
    state changes to XenbusStateInitWait ('2'). The end result is that
    blkback_changed() receives two notify and calls twice setup_blkring().
    
    While the backend driver may only get the first setup_blkring() which is
    wrong and reads out-dated (or reads them as they are being updated
    with new ring-ref values).
    
    The end result is that the ring ends up being incorrectly set.
    
    The other drivers in the tree have such checks already in.
    Reported-and-Tested-by: default avatarRobert Butera <robert.butera@oracle.com>
    Signed-off-by: default avatarBob Liu <bob.liu@oracle.com>
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    a9b54bb9
xen-blkfront.c 57.7 KB