aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_receiver.c
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2011-02-11 14:11:10 -0500
committerPhilipp Reisner <philipp.reisner@linbit.com>2011-10-14 10:45:01 -0400
commit8410da8f0e3ff5c97bce1b10627316be509ce476 (patch)
tree877eb301ff032bc8b95bcf6556d01470a459f98f /drivers/block/drbd/drbd_receiver.c
parentdad20554812e73a2bfbe45d1b161d5d3c249e597 (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.c11
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 }