diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2011-02-11 14:11:10 -0500 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2011-10-14 10:45:01 -0400 |
commit | 8410da8f0e3ff5c97bce1b10627316be509ce476 (patch) | |
tree | 877eb301ff032bc8b95bcf6556d01470a459f98f /drivers/block/drbd/drbd_receiver.c | |
parent | dad20554812e73a2bfbe45d1b161d5d3c249e597 (diff) |
drbd: Introduced tconn->cstate_mutex
In compatibility mode with old DRBDs, use that as the state_mutex
as well.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_receiver.c')
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 423e4dd2d53e..94c050ad55b6 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c | |||
@@ -753,6 +753,10 @@ static int drbd_connected(int vnr, void *p, void *data) | |||
753 | atomic_set(&mdev->packet_seq, 0); | 753 | atomic_set(&mdev->packet_seq, 0); |
754 | mdev->peer_seq = 0; | 754 | mdev->peer_seq = 0; |
755 | 755 | ||
756 | mdev->state_mutex = mdev->tconn->agreed_pro_version < 100 ? | ||
757 | &mdev->tconn->cstate_mutex : | ||
758 | &mdev->own_state_mutex; | ||
759 | |||
756 | ok &= drbd_send_sync_param(mdev, &mdev->sync_conf); | 760 | ok &= drbd_send_sync_param(mdev, &mdev->sync_conf); |
757 | ok &= drbd_send_sizes(mdev, 0, 0); | 761 | ok &= drbd_send_sizes(mdev, 0, 0); |
758 | ok &= drbd_send_uuids(mdev); | 762 | ok &= drbd_send_uuids(mdev); |
@@ -760,6 +764,7 @@ static int drbd_connected(int vnr, void *p, void *data) | |||
760 | clear_bit(USE_DEGR_WFC_T, &mdev->flags); | 764 | clear_bit(USE_DEGR_WFC_T, &mdev->flags); |
761 | clear_bit(RESIZE_PENDING, &mdev->flags); | 765 | clear_bit(RESIZE_PENDING, &mdev->flags); |
762 | 766 | ||
767 | |||
763 | return !ok; | 768 | return !ok; |
764 | } | 769 | } |
765 | 770 | ||
@@ -3167,8 +3172,8 @@ static int receive_uuids(struct drbd_conf *mdev, enum drbd_packet cmd, | |||
3167 | ongoing cluster wide state change is finished. That is important if | 3172 | ongoing cluster wide state change is finished. That is important if |
3168 | we are primary and are detaching from our disk. We need to see the | 3173 | we are primary and are detaching from our disk. We need to see the |
3169 | new disk state... */ | 3174 | new disk state... */ |
3170 | mutex_lock(&mdev->state_mutex); | 3175 | mutex_lock(mdev->state_mutex); |
3171 | mutex_unlock(&mdev->state_mutex); | 3176 | mutex_unlock(mdev->state_mutex); |
3172 | if (mdev->state.conn >= C_CONNECTED && mdev->state.disk < D_INCONSISTENT) | 3177 | if (mdev->state.conn >= C_CONNECTED && mdev->state.disk < D_INCONSISTENT) |
3173 | updated_uuids |= drbd_set_ed_uuid(mdev, p_uuid[UI_CURRENT]); | 3178 | updated_uuids |= drbd_set_ed_uuid(mdev, p_uuid[UI_CURRENT]); |
3174 | 3179 | ||
@@ -3219,7 +3224,7 @@ static int receive_req_state(struct drbd_conf *mdev, enum drbd_packet cmd, | |||
3219 | val.i = be32_to_cpu(p->val); | 3224 | val.i = be32_to_cpu(p->val); |
3220 | 3225 | ||
3221 | if (test_bit(DISCARD_CONCURRENT, &mdev->tconn->flags) && | 3226 | if (test_bit(DISCARD_CONCURRENT, &mdev->tconn->flags) && |
3222 | mutex_is_locked(&mdev->state_mutex)) { | 3227 | mutex_is_locked(mdev->state_mutex)) { |
3223 | drbd_send_sr_reply(mdev, SS_CONCURRENT_ST_CHG); | 3228 | drbd_send_sr_reply(mdev, SS_CONCURRENT_ST_CHG); |
3224 | return true; | 3229 | return true; |
3225 | } | 3230 | } |