• P
    drbd: Starting with protocol 96 we can allow app-IO while receiving the bitmap · 3719094e
    Philipp Reisner 提交于
    * C_STARTING_SYNC_S, C_STARTING_SYNC_T In these states the bitmap gets
      written to disk. Locking out of app-IO is done by using the
      drbd_queue_bitmap_io() and drbd_bitmap_io() functions these days.
      It is no longer necessary to lock out app-IO based on the connection
      state.
      App-IO that may come in after the BITMAP_IO flag got cleared before the
      state transition to C_SYNC_(SOURCE|TARGET) does not get mirrored, sets
      a bit in the local bitmap, that is already set, therefore changes nothing.
    
    * C_WF_BITMAP_S In this state we send updates (P_OUT_OF_SYNC packets).
      With that we make sure they have the same number of bits when going
      into the C_SYNC_(SOURCE|TARGET) connection state.
    
    * C_UNCONNECTED: The receiver starts, no need to lock out IO.
    
    * C_DISCONNECTING: in drbd_disconnect() we had a wait_event()
      to wait until ap_bio_cnt reaches 0. Removed that.
    
    * C_TIMEOUT, C_BROKEN_PIPE, C_NETWORK_FAILURE
      C_PROTOCOL_ERROR, C_TEAR_DOWN: Same as C_DISCONNECTING
    
    * C_WF_REPORT_PARAMS: IO still possible since that is still
      like C_WF_CONNECTION.
    
    And we do not need to send barriers in C_WF_BITMAP_S connection state.
    
    Allow concurrent accesses to the bitmap when receiving the bitmap.
    Everything gets ORed anyways.
    
    A drbd_free_tl_hash() is in after_state_chg_work(). At that point
    all the work items of the last connections must have been processed.
    
    Introduced a call to drbd_free_tl_hash() into drbd_free_mdev()
    for paranoia reasons.
    Signed-off-by: NPhilipp Reisner <philipp.reisner@linbit.com>
    Signed-off-by: NLars Ellenberg <lars.ellenberg@linbit.com>
    3719094e
drbd_req.c 37.1 KB