From: Lars Ellenberg Date: Mon, 26 Mar 2012 15:06:29 +0000 (+0200) Subject: drbd: move put_ldev from __req_mod() to the endio callback X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=2415308eb94e7bddf9c9a0f210374600210274d7;p=deliverable%2Flinux.git drbd: move put_ldev from __req_mod() to the endio callback Signed-off-by: Philipp Reisner Signed-off-by: Lars Ellenberg --- diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c index f6a785b239a4..f708aa1809f0 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 3adbc5a29702..f10451701cdb 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);