diff options
author | Mike Snitzer <snitzer@redhat.com> | 2022-02-18 07:39:59 +0300 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2022-02-21 23:35:39 +0300 |
commit | 0cdb90f0f306384ecbc60dfd6dc48cdbc1f2d0d8 (patch) | |
tree | 8415a9d8db228eee87404aa99f360053b37abba9 /drivers/md/dm.c | |
parent | 8d394bc4adf588ca4a0650745167cb83f86c18c9 (diff) | |
download | linux-0cdb90f0f306384ecbc60dfd6dc48cdbc1f2d0d8.tar.xz |
dm stats: fix too short end duration_ns when using precise_timestamps
dm_stats_account_io()'s STAT_PRECISE_TIMESTAMPS support doesn't handle
the fact that with commit b879f915bc48 ("dm: properly fix redundant
bio-based IO accounting") io->start_time _may_ be in the past (meaning
the start_io_acct() was deferred until later).
Add a new dm_stats_recalc_precise_timestamps() helper that will
set/clear a new 'precise_timestamps' flag in the dm_stats struct based
on whether any configured stats enable STAT_PRECISE_TIMESTAMPS.
And update DM core's alloc_io() to use dm_stats_record_start() to set
stats_aux.duration_ns if stats->precise_timestamps is true.
Also, remove unused 'last_sector' and 'last_rw' members from the
dm_stats struct.
Fixes: b879f915bc48 ("dm: properly fix redundant bio-based IO accounting")
Cc: stable@vger.kernel.org
Co-developed-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r-- | drivers/md/dm.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index c72a271ea999..3ae76900023b 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -552,6 +552,8 @@ static struct dm_io *alloc_io(struct mapped_device *md, struct bio *bio) io->start_time = jiffies; + dm_stats_record_start(&md->stats, &io->stats_aux); + return io; } |