• Lars Ellenberg's avatar
    drbd: fix for spurious full sync (becoming sync target looked like invalidate) · f2906e18
    Lars Ellenberg authored
    If a synctarget lost connection while being WFSyncUUID,
    due to "state sanitizing", the attempted state change to SyncTarget
    looked like an "invalidate" to after_state_ch() later,
    thus caused a full sync on next handshake (Bug #318).
    
    drbd0: PingAck did not arrive in time.
    drbd0: peer( Primary -> Unknown ) conn( WFSyncUUID -> NetworkFailure ) pdsk( UpToDate -> DUnknown )
    
            from  : { cs:NetworkFailure ro:Secondary/Unknown ds:UpToDate/DUnknown r--- }
            to    : { cs:SyncTarget ro:Secondary/Unknown ds:Inconsistent/DUnknown r--- }
            after sanizising, resulted in
            state: { cs:NetworkFailure ro:Secondary/Unknown ds:Inconsistent/DUnknown r--- }
            drbd0: disk( UpToDate -> Inconsistent )
    
    Fix:
    don't mask state transition errors in "sanitizing",
    so the requested state change to SyncTarget fails,
    instead of being implicitly "remaped" to invalidate.
    Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
    Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
    f2906e18
drbd_main.c 104 KB