block: make rq sector size accessible for block stats
authorHou Tao <houtao1@huawei.com>
Tue, 21 May 2019 07:59:03 +0000 (15:59 +0800)
committerJens Axboe <axboe@kernel.dk>
Sun, 15 Sep 2019 22:02:08 +0000 (16:02 -0600)
commit3d24430694077313c75c6b89f618db09943621e4
treef8688e775734e33e5616d916287e21f30147eb44
parent89f3b6d62f2c7c1ed7b2e672be605016d9ff60f2
block: make rq sector size accessible for block stats

Currently rq->data_len will be decreased by partial completion or
zeroed by completion, so when blk_stat_add() is invoked, data_len
will be zero and there will never be samples in poll_cb because
blk_mq_poll_stats_bkt() will return -1 if data_len is zero.

We could move blk_stat_add() back to __blk_mq_complete_request(),
but that would make the effort of trying to call ktime_get_ns()
once in vain. Instead we can reuse throtl_size field, and use
it for both block stats and block throttle, and adjust the
logic in blk_mq_poll_stats_bkt() accordingly.

Fixes: 4bc6339a583c ("block: move blk_stat_add() to __blk_mq_end_request()")
Tested-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c
block/blk-throttle.c
include/linux/blkdev.h