• P
    drbd: Bugfix for the connection behavior · 1e86ac48
    Philipp Reisner 提交于
    If we get into the C_BROKEN_PIPE cstate once, the state engine set the
    thi->t_state of the receiver thread to restarting.  But with the while loop
    in drbdd_init() a new connection gets established. After the call into
    drbdd() returns immediately since the thi->t_state is not RUNNING.  The
    restart of drbd_init() then resets thi->t_state to RUNNING.
    
    I.e. after entering C_BROKEN_PIPE once, the next successful established
    connection gets wasted.
    
    The two parts of the fix:
      * Do not cause the thread to restart if we detect the issue
        with the sockets while we are in C_WF_CONNECTION.
    
      * Make sure that all actions that would have set us to C_BROKEN_PIPE
        happen before the state change to C_WF_REPORT_PARAMS.
    Signed-off-by: NPhilipp Reisner <philipp.reisner@linbit.com>
    Signed-off-by: NLars Ellenberg <lars.ellenberg@linbit.com>
    1e86ac48
drbd_receiver.c 128.4 KB