Skip to content

Commit

Permalink
drbd: move put_ldev from __req_mod() to the endio callback
Browse files Browse the repository at this point in the history
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
  • Loading branch information
Lars Ellenberg authored and Philipp Reisner committed Nov 8, 2012
1 parent 6870ca6 commit 2415308
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 4 deletions.
4 changes: 0 additions & 4 deletions drivers/block/drbd/drbd_req.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -434,15 +433,13 @@ 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:
/* it is legal to fail READA */
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:
Expand All @@ -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:

Expand Down
1 change: 1 addition & 0 deletions drivers/block/drbd/drbd_worker.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 2415308

Please sign in to comment.