aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_req.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/drbd/drbd_req.c')
-rw-r--r--drivers/block/drbd/drbd_req.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index d9df1a1c40b9..39c2cc3614e4 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -634,6 +634,20 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
634 /* else: done by handed_over_to_network */ 634 /* else: done by handed_over_to_network */
635 break; 635 break;
636 636
637 case resend:
638 /* If RQ_NET_OK is already set, we got a P_WRITE_ACK or P_RECV_ACK
639 before the connection loss; only P_BARRIER_ACK was missing.
640 Trowing them out of the TL here by pretending we got a BARRIER_ACK
641 TODO: Either resync them, or ensure peer was not rebooted. */
642 if (!(req->rq_state & RQ_NET_OK)) {
643 if (req->w.cb) {
644 drbd_queue_work(&mdev->data.work, &req->w);
645 rv = req->rq_state & RQ_WRITE ? MR_WRITE : MR_READ;
646 }
647 break;
648 }
649 /* else, fall through to barrier_acked */
650
637 case barrier_acked: 651 case barrier_acked:
638 if (!(req->rq_state & RQ_WRITE)) 652 if (!(req->rq_state & RQ_WRITE))
639 break; 653 break;