diff options
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-mq.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c index 30bad930e661..010b878d53b3 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c | |||
@@ -434,10 +434,16 @@ void __blk_mq_complete_request(struct request *rq) | |||
434 | **/ | 434 | **/ |
435 | void blk_mq_complete_request(struct request *rq) | 435 | void blk_mq_complete_request(struct request *rq) |
436 | { | 436 | { |
437 | if (unlikely(blk_should_fake_timeout(rq->q))) | 437 | struct request_queue *q = rq->q; |
438 | |||
439 | if (unlikely(blk_should_fake_timeout(q))) | ||
438 | return; | 440 | return; |
439 | if (!blk_mark_rq_complete(rq)) | 441 | if (!blk_mark_rq_complete(rq)) { |
440 | __blk_mq_complete_request(rq); | 442 | if (q->softirq_done_fn) |
443 | __blk_mq_complete_request(rq); | ||
444 | else | ||
445 | blk_mq_end_io(rq, rq->errors); | ||
446 | } | ||
441 | } | 447 | } |
442 | EXPORT_SYMBOL(blk_mq_complete_request); | 448 | EXPORT_SYMBOL(blk_mq_complete_request); |
443 | 449 | ||