blk-mq: always initialize request->start_time
authorJens Axboe <axboe@fb.com>
Mon, 9 Jun 2014 15:36:53 +0000 (09:36 -0600)
committerJens Axboe <axboe@fb.com>
Mon, 9 Jun 2014 15:36:53 +0000 (09:36 -0600)
The blk-mq core only initializes this if io stats are enabled, since
blk-mq only reads the field in that case. But drivers could
potentially use it internally, so ensure that we always set it to
the current time when the request is allocated.

Reported-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq.c

index fafea52281ac9498f66eae3c8ac5d536ff335d9c..a5ea37d7e82013d8947fd2016ad8a010f9cb6b72 100644 (file)
@@ -185,6 +185,7 @@ static void blk_mq_rq_ctx_init(struct request_queue *q, struct blk_mq_ctx *ctx,
        RB_CLEAR_NODE(&rq->rb_node);
        rq->rq_disk = NULL;
        rq->part = NULL;
+       rq->start_time = jiffies;
 #ifdef CONFIG_BLK_CGROUP
        rq->rl = NULL;
        set_start_time_ns(rq);
@@ -1104,10 +1105,8 @@ static void blk_mq_bio_to_request(struct request *rq, struct bio *bio)
 {
        init_request_from_bio(rq, bio);
 
-       if (blk_do_io_stat(rq)) {
-               rq->start_time = jiffies;
+       if (blk_do_io_stat(rq))
                blk_account_io_start(rq, 1);
-       }
 }
 
 static inline bool blk_mq_merge_queue_io(struct blk_mq_hw_ctx *hctx,