Commit 8a3c1044 authored by Lars Ellenberg's avatar Lars Ellenberg Committed by Philipp Reisner

drbd: fix regression, we need to close drbd epochs during normal operation

commit e2041475e6ddb081734d161f6421977323f5a9b9
drbd: Starting with protocol 96 we can allow app-IO while receiving the bitmap

Contained a bad chunk that tried to optimize away drbd barriers during
bitmap exchange, but accidentally dropped them for normal mode as well.

Impact: depending on activity log size and access pattern, activity log
extents may not be recycled in time, causeing IO to block indefinetely.

Fix: skip drbd barriers only if there is no connection to send them on,
or the request being completed has not been on the network at all.
Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 09b9e797
...@@ -140,9 +140,14 @@ static void _about_to_complete_local_write(struct drbd_conf *mdev, ...@@ -140,9 +140,14 @@ static void _about_to_complete_local_write(struct drbd_conf *mdev,
struct hlist_node *n; struct hlist_node *n;
struct hlist_head *slot; struct hlist_head *slot;
/* before we can signal completion to the upper layers, /* Before we can signal completion to the upper layers,
* we may need to close the current epoch */ * we may need to close the current epoch.
if (mdev->state.conn >= C_WF_BITMAP_T && mdev->state.conn < C_AHEAD && * We can skip this, if this request has not even been sent, because we
* did not have a fully established connection yet/anymore, during
* bitmap exchange, or while we are C_AHEAD due to congestion policy.
*/
if (mdev->state.conn >= C_CONNECTED &&
(s & RQ_NET_SENT) != 0 &&
req->epoch == mdev->newest_tle->br_number) req->epoch == mdev->newest_tle->br_number)
queue_barrier(mdev); queue_barrier(mdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment