aboutsummaryrefslogtreecommitdiff
path: root/drivers/block
diff options
context:
space:
mode:
authorLars Ellenberg2012-03-26 16:44:59 +0200
committerPhilipp Reisner2012-11-08 16:58:22 +0100
commit27a434fe4006efa597a392d3575e3a5e9017994f (patch)
treebd09cd7167866aca7283c331138ea1f882e20c0a /drivers/block
parent2312f0b3c5ab794fbac9e9bebe90c784c9d449c5 (diff)
drbd: make OOS_HANDED_TO_NETWORK its own case
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/drbd/drbd_req.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index 5f4436c3abb3..d6198b50ea7c 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -523,10 +523,7 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
drbd_queue_work(&mdev->tconn->data.work, &req->w);
break;
- case OOS_HANDED_TO_NETWORK:
- /* actually the same */
case SEND_CANCELED:
- /* treat it the same */
case SEND_FAILED:
/* real cleanup will be done from tl_clear. just update flags
* so it is no longer marked as on the worker queue */
@@ -556,11 +553,14 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
}
req->rq_state &= ~RQ_NET_QUEUED;
req->rq_state |= RQ_NET_SENT;
- /* because _drbd_send_zc_bio could sleep, and may want to
- * dereference the bio even after the "WRITE_ACKED_BY_PEER" and
- * "COMPLETED_OK" events came in, once we return from
- * _drbd_send_zc_bio (drbd_send_dblock), we have to check
- * whether it is done already, and end it. */
+ _req_may_be_done_not_susp(req, m);
+ break;
+
+ case OOS_HANDED_TO_NETWORK:
+ /* Was not set PENDING, no longer QUEUED, so is now DONE
+ * as far as this connection is concerned. */
+ req->rq_state &= ~RQ_NET_QUEUED;
+ req->rq_state |= RQ_NET_DONE;
_req_may_be_done_not_susp(req, m);
break;