|
@@ -753,6 +753,10 @@ static int drbd_connected(int vnr, void *p, void *data)
|
|
|
atomic_set(&mdev->packet_seq, 0);
|
|
|
mdev->peer_seq = 0;
|
|
|
|
|
|
+ mdev->state_mutex = mdev->tconn->agreed_pro_version < 100 ?
|
|
|
+ &mdev->tconn->cstate_mutex :
|
|
|
+ &mdev->own_state_mutex;
|
|
|
+
|
|
|
ok &= drbd_send_sync_param(mdev, &mdev->sync_conf);
|
|
|
ok &= drbd_send_sizes(mdev, 0, 0);
|
|
|
ok &= drbd_send_uuids(mdev);
|
|
@@ -760,6 +764,7 @@ static int drbd_connected(int vnr, void *p, void *data)
|
|
|
clear_bit(USE_DEGR_WFC_T, &mdev->flags);
|
|
|
clear_bit(RESIZE_PENDING, &mdev->flags);
|
|
|
|
|
|
+
|
|
|
return !ok;
|
|
|
}
|
|
|
|
|
@@ -3167,8 +3172,8 @@ static int receive_uuids(struct drbd_conf *mdev, enum drbd_packet cmd,
|
|
|
ongoing cluster wide state change is finished. That is important if
|
|
|
we are primary and are detaching from our disk. We need to see the
|
|
|
new disk state... */
|
|
|
- mutex_lock(&mdev->state_mutex);
|
|
|
- mutex_unlock(&mdev->state_mutex);
|
|
|
+ mutex_lock(mdev->state_mutex);
|
|
|
+ mutex_unlock(mdev->state_mutex);
|
|
|
if (mdev->state.conn >= C_CONNECTED && mdev->state.disk < D_INCONSISTENT)
|
|
|
updated_uuids |= drbd_set_ed_uuid(mdev, p_uuid[UI_CURRENT]);
|
|
|
|
|
@@ -3219,7 +3224,7 @@ static int receive_req_state(struct drbd_conf *mdev, enum drbd_packet cmd,
|
|
|
val.i = be32_to_cpu(p->val);
|
|
|
|
|
|
if (test_bit(DISCARD_CONCURRENT, &mdev->tconn->flags) &&
|
|
|
- mutex_is_locked(&mdev->state_mutex)) {
|
|
|
+ mutex_is_locked(mdev->state_mutex)) {
|
|
|
drbd_send_sr_reply(mdev, SS_CONCURRENT_ST_CHG);
|
|
|
return true;
|
|
|
}
|