• Lars Ellenberg's avatar
    drbd: ignore "all zero" peer volume sizes in handshake · 94c43a13
    Lars Ellenberg authored
    During handshake, if we are diskless ourselves, we used to accept any size
    presented by the peer.
    
    Which could be zero if that peer was just brought up and connected
    to us without having a disk attached first, in which case both
    peers would just "flip" their volume sizes.
    
    Now, even a diskless node will ignore "zero" sizes
    presented by a diskless peer.
    
    Also a currently Diskless Primary will refuse to shrink during handshake:
    it may be frozen, and waiting for a "suitable" local disk or peer to
    re-appear (on-no-data-accessible suspend-io). If the peer is smaller
    than what we used to be, it is not suitable.
    
    The logic for a diskless node during handshake is now supposed to be:
    believe the peer, if
     - I don't have a current size myself
     - we agree on the size anyways
     - I do have a current size, am Secondary, and he has the only disk
     - I do have a current size, am Primary, and he has the only disk,
       which is larger than my current size
    Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    94c43a13
drbd_receiver.c 173 KB