Skip to content

Commit

Permalink
blk-mq: bidi support
Browse files Browse the repository at this point in the history
Add two unlinkely branches to make sure the resid is initialized correctly
for bidi request pairs, and the second request gets properly freed.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
  • Loading branch information
Christoph Hellwig authored and Jens Axboe committed Apr 16, 2014
1 parent 63151a4 commit 91b6363
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions block/blk-mq.c
Original file line number Diff line number Diff line change
Expand Up @@ -298,10 +298,13 @@ inline void __blk_mq_end_io(struct request *rq, int error)
{
blk_account_io_done(rq);

if (rq->end_io)
if (rq->end_io) {
rq->end_io(rq, error);
else
} else {
if (unlikely(blk_bidi_rq(rq)))
blk_mq_free_request(rq->next_rq);
blk_mq_free_request(rq);
}
}
EXPORT_SYMBOL(__blk_mq_end_io);

Expand Down Expand Up @@ -366,6 +369,8 @@ static void blk_mq_start_request(struct request *rq, bool last)
trace_block_rq_issue(q, rq);

rq->resid_len = blk_rq_bytes(rq);
if (unlikely(blk_bidi_rq(rq)))
rq->next_rq->resid_len = blk_rq_bytes(rq->next_rq);

/*
* Just mark start time and set the started bit. Due to memory
Expand Down

0 comments on commit 91b6363

Please sign in to comment.