Distributed Replicated Block Device (DRBD) development
 help / color / mirror / Atom feed
From: Philipp Reisner <philipp.reisner@linbit.com>
To: linux-kernel@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Cc: drbd-dev@lists.linbit.com
Subject: [Drbd-dev] [PATCH 6/7] drbd: Fix state change in case of connection timeout
Date: Mon, 10 Nov 2014 17:21:14 +0100	[thread overview]
Message-ID: <1415636475-7883-7-git-send-email-philipp.reisner@linbit.com> (raw)
In-Reply-To: <1415636475-7883-1-git-send-email-philipp.reisner@linbit.com>

A connection timeout affects all volumes of a resource!
Under the following conditions:

 A resource with multiple volumes
  AND
 ko-count >=1
  AND
 a write request triggers the timeout (ko-count * timeout)

DRBD's internal state gets confused. That in turn may
lead to very miss leading follow up failures. E.g.
"BUG: scheduling while atomic"

CC: stable@kernel.org # v3.17
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
 drivers/block/drbd/drbd_req.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index 90319b1..3b797cd 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -1629,7 +1629,7 @@ void request_timer_fn(unsigned long data)
 		 time_after(now, req_peer->pre_send_jif + ent) &&
 		!time_in_range(now, connection->last_reconnect_jif, connection->last_reconnect_jif + ent)) {
 		drbd_warn(device, "Remote failed to finish a request within ko-count * timeout\n");
-		_drbd_set_state(_NS(device, conn, C_TIMEOUT), CS_VERBOSE | CS_HARD, NULL);
+		_conn_request_state(connection, NS(conn, C_TIMEOUT), CS_VERBOSE | CS_HARD);
 	}
 	if (dt && oldest_submit_jif != now &&
 		 time_after(now, oldest_submit_jif + dt) &&
-- 
1.9.1


  parent reply	other threads:[~2014-11-10 16:21 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-10 16:21 [Drbd-dev] [PATCH 0/7] DRBD updates for the 3.19 merge window Philipp Reisner
2014-11-10 16:21 ` [Drbd-dev] [PATCH 1/7] drbd: Minor cleanups Philipp Reisner
2014-11-10 16:21 ` [Drbd-dev] [PATCH 2/7] drbd: Only use drbd_msg_put_info() in drbd_nl.c Philipp Reisner
2014-11-10 16:21 ` [Drbd-dev] [PATCH 3/7] drbd: fix race between role change and handshake Philipp Reisner
2014-11-10 16:21 ` [Drbd-dev] [PATCH 4/7] drbd: fix resync throttling initialization Philipp Reisner
2014-11-10 16:21 ` [Drbd-dev] [PATCH 5/7] drbd: merge_bvec_fn: properly remap bvm->bi_bdev Philipp Reisner
2014-11-10 16:21 ` Philipp Reisner [this message]
2014-11-10 16:21 ` [Drbd-dev] [PATCH 7/7] drbd: Remove an useless copy of kernel_setsockopt() Philipp Reisner
2014-11-10 16:38 ` [Drbd-dev] [PATCH 0/7] DRBD updates for the 3.19 merge window Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2014-10-29 16:37 [Drbd-dev] [PATCH 0/7] RFC DRBD updates for 3.19 Philipp Reisner
2014-10-29 16:37 ` [Drbd-dev] [PATCH 6/7] drbd: Fix state change in case of connection timeout Philipp Reisner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1415636475-7883-7-git-send-email-philipp.reisner@linbit.com \
    --to=philipp.reisner@linbit.com \
    --cc=axboe@kernel.dk \
    --cc=drbd-dev@lists.linbit.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox