On 11/30/18 10:27 AM, Christoph Hellwig wrote: > On Fri, Nov 30, 2018 at 08:56:25AM -0700, Jens Axboe wrote: >> We only need the request fields and the end_io time if we have stats >> enabled, or if we have a scheduler attached as those may use it for >> completion time stats. >> >> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> >> --- >> block/blk-mq.c | 13 ++++++++++--- >> 1 file changed, 10 insertions(+), 3 deletions(-) >> >> diff --git a/block/blk-mq.c b/block/blk-mq.c >> index 7dcef565dc0f..2b458e9da946 100644 >> --- a/block/blk-mq.c >> +++ b/block/blk-mq.c >> @@ -316,7 +316,8 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, >> RB_CLEAR_NODE(&rq->rb_node); >> rq->rq_disk = NULL; >> rq->part = NULL; >> - rq->start_time_ns = ktime_get_ns(); >> + if (data->q->elevator) >> + rq->start_time_ns = ktime_get_ns(); > > We also seem to use start_time_ns it in blk_account_io_done. But only if RQF_STATS is set, in which case we are passing it in correctly. > Also update it in attempt_merge, which might have some odd results > for completly uninitialized fields. I did notice these, but it's pointless to change those, as you'd then have to check validity. Nobody cares at that point... -- Jens Axboe