• Lars Ellenberg's avatar
    drbd: fix schedule in atomic · 009ba89d
    Lars Ellenberg authored
    An administrative detach used to request a state change directly to D_DISKLESS,
    first suspending IO to avoid the last put_ldev() occuring from an endio handler,
    potentially in irq context.
    
    This is not enough on the receiving side (typically secondary), we may miss
    some peer_req on the way to local disk, which then may do the last put_ldev()
    from their drbd_peer_request_endio().
    
    This patch makes the detach always go through the intermediate D_FAILED state.
    We may consider to rename it D_DETACHING.
    
    Alternative approach would be to create yet an other work item to be scheduled
    on the worker, do the destructor work from there, and get the timing right.
    Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
    Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
    009ba89d
drbd_nl.c 86.2 KB