diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2011-02-23 10:10:01 -0500 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2011-10-14 10:48:04 -0400 |
commit | 3c13b680ce210313c6f7ad163435b62979958c09 (patch) | |
tree | 16b2cf96f885d1b478980afd4544fabf60323d28 | |
parent | a5df0e199cf6b31400fa86f6c3f73fa6e127e9ed (diff) |
drbd: only wakeup if something changed in update_peer_seq
This commit got it wrong:
drbd: Make the peer_seq updating code more obvious
Make it more clear that update_peer_seq() is supposed to wake up the
seq_wait queue whenever the sequence number changes.
We don't need to wake up everytime we receive a sequence number
that is _different_ from our currently stored "newest" sequence number,
but only if we receive a sequence number _newer_ than what we already
have, when we actually change mdev->peer_seq.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index e44bf3c25718..cd78ebfefe52 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c | |||
@@ -1734,14 +1734,15 @@ static bool need_peer_seq(struct drbd_conf *mdev) | |||
1734 | 1734 | ||
1735 | static void update_peer_seq(struct drbd_conf *mdev, unsigned int peer_seq) | 1735 | static void update_peer_seq(struct drbd_conf *mdev, unsigned int peer_seq) |
1736 | { | 1736 | { |
1737 | unsigned int old_peer_seq; | 1737 | unsigned int newest_peer_seq; |
1738 | 1738 | ||
1739 | if (need_peer_seq(mdev)) { | 1739 | if (need_peer_seq(mdev)) { |
1740 | spin_lock(&mdev->peer_seq_lock); | 1740 | spin_lock(&mdev->peer_seq_lock); |
1741 | old_peer_seq = mdev->peer_seq; | 1741 | newest_peer_seq = seq_max(mdev->peer_seq, peer_seq); |
1742 | mdev->peer_seq = seq_max(mdev->peer_seq, peer_seq); | 1742 | mdev->peer_seq = newest_peer_seq; |
1743 | spin_unlock(&mdev->peer_seq_lock); | 1743 | spin_unlock(&mdev->peer_seq_lock); |
1744 | if (old_peer_seq != peer_seq) | 1744 | /* wake up only if we actually changed mdev->peer_seq */ |
1745 | if (peer_seq == newest_peer_seq) | ||
1745 | wake_up(&mdev->seq_wait); | 1746 | wake_up(&mdev->seq_wait); |
1746 | } | 1747 | } |
1747 | } | 1748 | } |