From e89949f4704dcaeb927b38e4f414185be13dc807 Mon Sep 17 00:00:00 2001 From: Lars Ellenberg Date: Mon, 3 Sep 2012 14:08:35 +0200 Subject: [PATCH] --- yaml --- r: 346261 b: refs/heads/master c: 70f17b6bd18dfe33f40db7573baa663b866be6ba h: refs/heads/master i: 346259: fdb9361bcba7690c782f6042aac82abf5ac116be v: v3 --- [refs] | 2 +- trunk/drivers/block/drbd/drbd_req.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 52f33c9aa418..691fcb61948f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 76590cd1fc338fd1c50f7121636db421deb8b881 +refs/heads/master: 70f17b6bd18dfe33f40db7573baa663b866be6ba diff --git a/trunk/drivers/block/drbd/drbd_req.c b/trunk/drivers/block/drbd/drbd_req.c index d1d17fcd9232..e307890e6afe 100644 --- a/trunk/drivers/block/drbd/drbd_req.c +++ b/trunk/drivers/block/drbd/drbd_req.c @@ -123,7 +123,14 @@ void drbd_req_destroy(struct kref *kref) * (local only or remote failed). * Other places where we set out-of-sync: * READ with local io-error */ - if (!(s & RQ_POSTPONED)) { + + /* There is a special case: + * we may notice late that IO was suspended, + * and postpone, or schedule for retry, a write, + * before it even was submitted or sent. + * In that case we do not want to touch the bitmap at all. + */ + if ((s & (RQ_POSTPONED|RQ_LOCAL_MASK|RQ_NET_MASK)) != RQ_POSTPONED) { if (!(s & RQ_NET_OK) || !(s & RQ_LOCAL_OK)) drbd_set_out_of_sync(mdev, req->i.sector, req->i.size);