block: count 'ios' and 'sectors' when io is done for bio-based device
authorYu Kuai <yukuai3@huawei.com>
Thu, 23 Feb 2023 09:12:26 +0000 (17:12 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 15 Mar 2023 15:25:04 +0000 (09:25 -0600)
commit5f27571382ca42daa3e3d40d1b252bf18c2b61d2
tree8f1fe6b4727f5b014fb676ee07a9e233a2934ddf
parent6030363199e3a6341afb467ddddbed56640cbf6a
block: count 'ios' and 'sectors' when io is done for bio-based device

While using iostat for raid, I observed very strange 'await'
occasionally, and turns out it's due to that 'ios' and 'sectors' is
counted in bdev_start_io_acct(), while 'nsecs' is counted in
bdev_end_io_acct(). I'm not sure why they are ccounted like that
but I think this behaviour is obviously wrong because user will get
wrong disk stats.

Fix the problem by counting 'ios' and 'sectors' when io is done, like
what rq-based device does.

Fixes: 394ffa503bc4 ("blk: introduce generic io stat accounting help function")
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20230223091226.1135678-1-yukuai1@huaweicloud.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
drivers/md/dm.c
drivers/nvme/host/multipath.c
include/linux/blkdev.h