From ac3f2d292d49cbd0aa3218b5764358a61eb506e6 Mon Sep 17 00:00:00 2001 From: Philipp Reisner Date: Tue, 17 May 2011 14:19:41 +0200 Subject: [PATCH] --- yaml --- r: 251279 b: refs/heads/master c: 21423fa79119a80e335de0c82ec29f67ed59f1bc h: refs/heads/master i: 251277: 29f7d041fbec97c2d80ef1a2de4d62a2910fb9e7 251275: e16d028417653166e4af3f030a7d19b9647beb37 251271: 77123409a193be75028c23ac893b2d145eac968e 251263: b48118c5c3ed778930d4c4e6ab3f2c33e7bbd565 v: v3 --- [refs] | 2 +- trunk/drivers/block/drbd/drbd_nl.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 6357c0b24ba7..a2bc233c8a8a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fa7d939663b61f5c2bd3436d3aa126d4c0f47aa8 +refs/heads/master: 21423fa79119a80e335de0c82ec29f67ed59f1bc diff --git a/trunk/drivers/block/drbd/drbd_nl.c b/trunk/drivers/block/drbd/drbd_nl.c index 03b29f78a37d..9dfe58a09625 100644 --- a/trunk/drivers/block/drbd/drbd_nl.c +++ b/trunk/drivers/block/drbd/drbd_nl.c @@ -272,9 +272,22 @@ static int _try_outdate_peer_async(void *data) { struct drbd_conf *mdev = (struct drbd_conf *)data; enum drbd_disk_state nps; + union drbd_state ns; nps = drbd_try_outdate_peer(mdev); - drbd_request_state(mdev, NS(pdsk, nps)); + + /* Not using + drbd_request_state(mdev, NS(pdsk, nps)); + here, because we might were able to re-establish the connection in the + meantime. + */ + spin_lock_irq(&mdev->req_lock); + ns = mdev->state; + if (ns.conn < C_WF_REPORT_PARAMS) { + ns.pdsk = nps; + _drbd_set_state(mdev, ns, CS_VERBOSE, NULL); + } + spin_unlock_irq(&mdev->req_lock); return 0; }