From d6c23a06c582d4817ecd629e8f15ff77cf7f7f48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Almeida?= <andrealmeid@collabora.com> Date: Mon, 20 Jul 2020 12:00:59 -0300 Subject: [PATCH] dm mpath: use precise ns for BIO based MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of casting jiffies to nseconds, which may lead to loose precision, use nseconds without conversion. Signed-off-by: André Almeida <andrealmeid@collabora.com> --- drivers/md/dm-mpath.c | 4 +++- drivers/md/dm.c | 9 --------- include/linux/device-mapper.h | 2 -- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 88dc7b41b1c6..ced3d3cbad56 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -105,6 +105,7 @@ struct multipath { struct dm_mpath_io { struct pgpath *pgpath; size_t nr_bytes; + u64 start_time_ns; }; typedef int (*action_fn) (struct pgpath *pgpath); @@ -649,6 +650,7 @@ static int __multipath_map_bio(struct multipath *m, struct bio *bio, } mpio->pgpath = pgpath; + mpio->start_time_ns = ktime_get_ns(); bio->bi_status = 0; bio_set_dev(bio, pgpath->path.dev->bdev); @@ -1712,7 +1714,7 @@ static int multipath_end_io_bio(struct dm_target *ti, struct bio *clone, if (ps->type->end_io) ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes, - dm_start_time_ns_from_clone(clone)); + mpio->start_time_ns); } return r; diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 52449afd58eb..ed347d763789 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -655,15 +655,6 @@ static void free_tio(struct dm_target_io *tio) bio_put(&tio->clone); } -u64 dm_start_time_ns_from_clone(struct bio *bio) -{ - struct dm_target_io *tio = container_of(bio, struct dm_target_io, clone); - struct dm_io *io = tio->io; - - return jiffies_to_nsecs(io->start_time); -} -EXPORT_SYMBOL_GPL(dm_start_time_ns_from_clone); - static void start_io_acct(struct dm_io *io) { struct mapped_device *md = io->md; diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 8750f2dc5613..6df78be3637e 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -332,8 +332,6 @@ void *dm_per_bio_data(struct bio *bio, size_t data_size); struct bio *dm_bio_from_per_bio_data(void *data, size_t data_size); unsigned dm_bio_get_target_bio_nr(const struct bio *bio); -u64 dm_start_time_ns_from_clone(struct bio *bio); - int dm_register_target(struct target_type *t); void dm_unregister_target(struct target_type *t); -- GitLab