diff options
-rw-r--r-- | drivers/block/drbd/drbd_req.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index d1d17fcd9232..e307890e6afe 100644 --- a/drivers/block/drbd/drbd_req.c +++ b/drivers/block/drbd/drbd_req.c | |||
@@ -123,7 +123,14 @@ void drbd_req_destroy(struct kref *kref) | |||
123 | * (local only or remote failed). | 123 | * (local only or remote failed). |
124 | * Other places where we set out-of-sync: | 124 | * Other places where we set out-of-sync: |
125 | * READ with local io-error */ | 125 | * READ with local io-error */ |
126 | if (!(s & RQ_POSTPONED)) { | 126 | |
127 | /* There is a special case: | ||
128 | * we may notice late that IO was suspended, | ||
129 | * and postpone, or schedule for retry, a write, | ||
130 | * before it even was submitted or sent. | ||
131 | * In that case we do not want to touch the bitmap at all. | ||
132 | */ | ||
133 | if ((s & (RQ_POSTPONED|RQ_LOCAL_MASK|RQ_NET_MASK)) != RQ_POSTPONED) { | ||
127 | if (!(s & RQ_NET_OK) || !(s & RQ_LOCAL_OK)) | 134 | if (!(s & RQ_NET_OK) || !(s & RQ_LOCAL_OK)) |
128 | drbd_set_out_of_sync(mdev, req->i.sector, req->i.size); | 135 | drbd_set_out_of_sync(mdev, req->i.sector, req->i.size); |
129 | 136 | ||