From 2415308eb94e7bddf9c9a0f210374600210274d7 Mon Sep 17 00:00:00 2001
From: Lars Ellenberg <lars.ellenberg@linbit.com>
Date: Mon, 26 Mar 2012 17:06:29 +0200
Subject: [PATCH] drbd: move put_ldev from __req_mod() to the endio callback

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
---
 drivers/block/drbd/drbd_req.c    | 4 ----
 drivers/block/drbd/drbd_worker.c | 1 +
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index f6a785b239a46..f708aa1809f0e 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -416,7 +416,6 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
 
 		maybe_wakeup_conflicting_requests(req);
 		req_may_be_completed_not_susp(req, m);
-		put_ldev(mdev);
 		break;
 
 	case ABORT_DISK_IO:
@@ -434,7 +433,6 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
 		__drbd_chk_io_error(mdev, false);
 		maybe_wakeup_conflicting_requests(req);
 		req_may_be_completed_not_susp(req, m);
-		put_ldev(mdev);
 		break;
 
 	case READ_AHEAD_COMPLETED_WITH_ERROR:
@@ -442,7 +440,6 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
 		req->rq_state |= RQ_LOCAL_COMPLETED;
 		req->rq_state &= ~RQ_LOCAL_PENDING;
 		req_may_be_completed_not_susp(req, m);
-		put_ldev(mdev);
 		break;
 
 	case READ_COMPLETED_WITH_ERROR:
@@ -454,7 +451,6 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
 		D_ASSERT(!(req->rq_state & RQ_NET_MASK));
 
 		__drbd_chk_io_error(mdev, false);
-		put_ldev(mdev);
 
 	goto_queue_for_net_read:
 
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index 3adbc5a29702b..f10451701cdbb 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -238,6 +238,7 @@ void drbd_request_endio(struct bio *bio, int error)
 	spin_lock_irqsave(&mdev->tconn->req_lock, flags);
 	__req_mod(req, what, &m);
 	spin_unlock_irqrestore(&mdev->tconn->req_lock, flags);
+	put_ldev(mdev);
 
 	if (m.bio)
 		complete_master_bio(mdev, &m);
-- 
2.30.2