aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/drbd/drbd_state.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c
index 60dde030123b..f3e6090d462b 100644
--- a/drivers/block/drbd/drbd_state.c
+++ b/drivers/block/drbd/drbd_state.c
@@ -1187,21 +1187,25 @@ static void after_state_ch(struct drbd_conf *mdev, union drbd_state os,
1187 state change. This function might sleep */ 1187 state change. This function might sleep */
1188 1188
1189 if (ns.susp_nod) { 1189 if (ns.susp_nod) {
1190 struct drbd_tconn *tconn = mdev->tconn;
1190 enum drbd_req_event what = NOTHING; 1191 enum drbd_req_event what = NOTHING;
1191 1192
1192 if (os.conn < C_CONNECTED && conn_lowest_conn(mdev->tconn) >= C_CONNECTED) 1193 spin_lock_irq(&tconn->req_lock);
1194 if (os.conn < C_CONNECTED && conn_lowest_conn(tconn) >= C_CONNECTED)
1193 what = RESEND; 1195 what = RESEND;
1194 1196
1195 if ((os.disk == D_ATTACHING || os.disk == D_NEGOTIATING) && 1197 if ((os.disk == D_ATTACHING || os.disk == D_NEGOTIATING) &&
1196 conn_lowest_disk(mdev->tconn) > D_NEGOTIATING) 1198 conn_lowest_disk(tconn) > D_NEGOTIATING)
1197 what = RESTART_FROZEN_DISK_IO; 1199 what = RESTART_FROZEN_DISK_IO;
1198 1200
1199 if (what != NOTHING) { 1201 if (tconn->susp_nod && what != NOTHING) {
1200 spin_lock_irq(&mdev->tconn->req_lock); 1202 _tl_restart(tconn, what);
1201 _tl_restart(mdev->tconn, what); 1203 _conn_request_state(tconn,
1202 _drbd_set_state(_NS(mdev, susp_nod, 0), CS_VERBOSE, NULL); 1204 (union drbd_state) { { .susp_nod = 1 } },
1203 spin_unlock_irq(&mdev->tconn->req_lock); 1205 (union drbd_state) { { .susp_nod = 0 } },
1206 CS_VERBOSE);
1204 } 1207 }
1208 spin_unlock_irq(&tconn->req_lock);
1205 } 1209 }
1206 1210
1207 if (ns.susp_fen) { 1211 if (ns.susp_fen) {