Skip to content

Commit

Permalink
Do not deadlock in drbd_disconnect() [bugz 258]
Browse files Browse the repository at this point in the history
When there are many blocks on the fly (ua), and the AL gets into "starving"
mode (random IO, scattered all over the device), and the connections gets
interrupted, the receiver thread deadlocks in the drbd_disconnect() code path.

Affected are only nodes in Primary role.

The bug triggers most likely on system that mirror over "long distances"

Regression introduced shortly before 8.3.3
with git commit 31e0f1250f174ac1ee317f360943a0159e19edc8

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
  • Loading branch information
Philipp Reisner committed Nov 4, 2009
1 parent 0a49216 commit e656ec8
Showing 1 changed file with 0 additions and 4 deletions.
4 changes: 0 additions & 4 deletions drivers/block/drbd/drbd_receiver.c
Original file line number Diff line number Diff line change
Expand Up @@ -3619,10 +3619,6 @@ static void drbd_disconnect(struct drbd_conf *mdev)
set_bit(STOP_SYNC_TIMER, &mdev->flags);
resync_timer_fn((unsigned long)mdev);

/* so we can be sure that all remote or resync reads
* made it at least to net_ee */
wait_event(mdev->misc_wait, !atomic_read(&mdev->local_cnt));

/* wait for all w_e_end_data_req, w_e_end_rsdata_req, w_send_barrier,
* w_make_resync_request etc. which may still be on the worker queue
* to be "canceled" */
Expand Down

0 comments on commit e656ec8

Please sign in to comment.