提交 91b63639 编写于 作者: C Christoph Hellwig 提交者: Jens Axboe

blk-mq: bidi support

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: NChristoph Hellwig <hch@lst.de>
Signed-off-by: NJens Axboe <axboe@fb.com>
上级 63151a44
...@@ -298,10 +298,13 @@ inline void __blk_mq_end_io(struct request *rq, int error) ...@@ -298,10 +298,13 @@ inline void __blk_mq_end_io(struct request *rq, int error)
{ {
blk_account_io_done(rq); blk_account_io_done(rq);
if (rq->end_io) if (rq->end_io) {
rq->end_io(rq, error); 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); blk_mq_free_request(rq);
}
} }
EXPORT_SYMBOL(__blk_mq_end_io); EXPORT_SYMBOL(__blk_mq_end_io);
...@@ -366,6 +369,8 @@ static void blk_mq_start_request(struct request *rq, bool last) ...@@ -366,6 +369,8 @@ static void blk_mq_start_request(struct request *rq, bool last)
trace_block_rq_issue(q, rq); trace_block_rq_issue(q, rq);
rq->resid_len = blk_rq_bytes(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 * Just mark start time and set the started bit. Due to memory
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册