diff --git a/block/blk-mq.c b/block/blk-mq.c index 51edbbb91369..3d3952301b3e 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -770,22 +770,16 @@ EXPORT_SYMBOL(blk_mq_tag_to_rq); static void blk_mq_rq_timed_out(struct request *req, bool reserved) { - const struct blk_mq_ops *ops = req->q->mq_ops; - enum blk_eh_timer_return ret = BLK_EH_RESET_TIMER; + if (req->q->mq_ops->timeout) { + enum blk_eh_timer_return ret; - if (ops->timeout) - ret = ops->timeout(req, reserved); - - switch (ret) { - case BLK_EH_RESET_TIMER: - blk_add_timer(req); - break; - case BLK_EH_DONE: - break; - default: - printk(KERN_ERR "block: bad eh return: %d\n", ret); - break; + ret = req->q->mq_ops->timeout(req, reserved); + if (ret == BLK_EH_DONE) + return; + WARN_ON_ONCE(ret != BLK_EH_RESET_TIMER); } + + blk_add_timer(req); } static bool blk_mq_req_expired(struct request *rq, unsigned long *next)