diff options
author | Khazhismel Kumykov <khazhy@google.com> | 2022-04-11 15:03:35 -0700 |
---|---|---|
committer | Mike Snitzer <snitzer@kernel.org> | 2022-04-13 13:22:16 -0400 |
commit | ce40426fdc3c92acdba6b5ca74bc7277ffaa6a3d (patch) | |
tree | 5854511d1b2d3cac9dadf05b2a8d4393b5cdf147 /drivers/md/dm-ps-historical-service-time.c | |
parent | 08c1af8f1c13bbf210f1760132f4df24d0ed46d6 (diff) | |
download | linux-stable-ce40426fdc3c92acdba6b5ca74bc7277ffaa6a3d.tar.gz linux-stable-ce40426fdc3c92acdba6b5ca74bc7277ffaa6a3d.tar.bz2 linux-stable-ce40426fdc3c92acdba6b5ca74bc7277ffaa6a3d.zip |
dm mpath: only use ktime_get_ns() in historical selector
Mixing sched_clock() and ktime_get_ns() usage will give bad results.
Switch hst_select_path() from using sched_clock() to ktime_get_ns().
Also rename path_service_time()'s 'sched_now' variable to 'now'.
Fixes: 2613eab11996 ("dm mpath: add Historical Service Time Path Selector")
Signed-off-by: Khazhismel Kumykov <khazhy@google.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Diffstat (limited to 'drivers/md/dm-ps-historical-service-time.c')
-rw-r--r-- | drivers/md/dm-ps-historical-service-time.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/md/dm-ps-historical-service-time.c b/drivers/md/dm-ps-historical-service-time.c index 875bca30a0dd..82f2a06153dc 100644 --- a/drivers/md/dm-ps-historical-service-time.c +++ b/drivers/md/dm-ps-historical-service-time.c @@ -27,7 +27,6 @@ #include <linux/blkdev.h> #include <linux/slab.h> #include <linux/module.h> -#include <linux/sched/clock.h> #define DM_MSG_PREFIX "multipath historical-service-time" @@ -433,7 +432,7 @@ static struct dm_path *hst_select_path(struct path_selector *ps, { struct selector *s = ps->context; struct path_info *pi = NULL, *best = NULL; - u64 time_now = sched_clock(); + u64 time_now = ktime_get_ns(); struct dm_path *ret = NULL; unsigned long flags; @@ -474,7 +473,7 @@ static int hst_start_io(struct path_selector *ps, struct dm_path *path, static u64 path_service_time(struct path_info *pi, u64 start_time) { - u64 sched_now = ktime_get_ns(); + u64 now = ktime_get_ns(); /* if a previous disk request has finished after this IO was * sent to the hardware, pretend the submission happened @@ -483,11 +482,11 @@ static u64 path_service_time(struct path_info *pi, u64 start_time) if (time_after64(pi->last_finish, start_time)) start_time = pi->last_finish; - pi->last_finish = sched_now; - if (time_before64(sched_now, start_time)) + pi->last_finish = now; + if (time_before64(now, start_time)) return 0; - return sched_now - start_time; + return now - start_time; } static int hst_end_io(struct path_selector *ps, struct dm_path *path, |