drbd: move put_ldev from __req_mod() to the endio callback
authorLars Ellenberg <lars.ellenberg@linbit.com>
Mon, 16 Jan 2012 14:04:33 +0000 (15:04 +0100)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Wed, 9 May 2012 13:16:51 +0000 (15:16 +0200)
One invocation in the endio handler is good enough,
we don't need mention it for each of the different ways
it calls __req_mod().

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_req.c
drivers/block/drbd/drbd_worker.c

index cd7687f..340d57b 100644 (file)
@@ -441,7 +441,6 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
                req->rq_state &= ~RQ_LOCAL_PENDING;
 
                _req_may_be_done_not_susp(req, m);
-               put_ldev(mdev);
                break;
 
        case abort_disk_io:
@@ -458,7 +457,6 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
 
                __drbd_chk_io_error(mdev, false);
                _req_may_be_done_not_susp(req, m);
-               put_ldev(mdev);
                break;
 
        case read_ahead_completed_with_error:
@@ -466,7 +464,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_done_not_susp(req, m);
-               put_ldev(mdev);
                break;
 
        case read_completed_with_error:
@@ -478,7 +475,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:
 
index 14aa4a2..620c70f 100644 (file)
@@ -244,6 +244,7 @@ void drbd_endio_pri(struct bio *bio, int error)
        spin_lock_irqsave(&mdev->req_lock, flags);
        __req_mod(req, what, &m);
        spin_unlock_irqrestore(&mdev->req_lock, flags);
+       put_ldev(mdev);
 
        if (m.bio)
                complete_master_bio(mdev, &m);