|
|
a5a7cf |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
a5a7cf |
From: Benjamin Marzinski <bmarzins@redhat.com>
|
|
|
a5a7cf |
Date: Thu, 14 Jan 2021 20:20:25 -0600
|
|
|
a5a7cf |
Subject: [PATCH] multipathd: use get_monotonic_time() in io_err_stat code
|
|
|
a5a7cf |
|
|
|
a5a7cf |
Instead of calling clock_gettime(), and dealing with failure
|
|
|
a5a7cf |
conditions, just call get_monotonic_time().
|
|
|
a5a7cf |
|
|
|
a5a7cf |
Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
|
|
|
a5a7cf |
Reviewed-by: Martin Wilck <mwilck@suse.com>
|
|
|
a5a7cf |
---
|
|
|
a5a7cf |
libmultipath/io_err_stat.c | 34 +++++++++++-----------------------
|
|
|
a5a7cf |
1 file changed, 11 insertions(+), 23 deletions(-)
|
|
|
a5a7cf |
|
|
|
a5a7cf |
diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c
|
|
|
a5a7cf |
index 63ee2e07..3389d693 100644
|
|
|
a5a7cf |
--- a/libmultipath/io_err_stat.c
|
|
|
a5a7cf |
+++ b/libmultipath/io_err_stat.c
|
|
|
a5a7cf |
@@ -305,8 +305,7 @@ int io_err_stat_handle_pathfail(struct path *path)
|
|
|
a5a7cf |
* the repeated count threshold and time frame, we assume a path
|
|
|
a5a7cf |
* which fails at least twice within 60 seconds is flaky.
|
|
|
a5a7cf |
*/
|
|
|
a5a7cf |
- if (clock_gettime(CLOCK_MONOTONIC, &curr_time) != 0)
|
|
|
a5a7cf |
- return 1;
|
|
|
a5a7cf |
+ get_monotonic_time(&curr_time);
|
|
|
a5a7cf |
if (path->io_err_pathfail_cnt == 0) {
|
|
|
a5a7cf |
path->io_err_pathfail_cnt++;
|
|
|
a5a7cf |
path->io_err_pathfail_starttime = curr_time.tv_sec;
|
|
|
a5a7cf |
@@ -362,9 +361,9 @@ int need_io_err_check(struct path *pp)
|
|
|
a5a7cf |
}
|
|
|
a5a7cf |
if (pp->io_err_pathfail_cnt != PATH_IO_ERR_WAITING_TO_CHECK)
|
|
|
a5a7cf |
return 1;
|
|
|
a5a7cf |
- if (clock_gettime(CLOCK_MONOTONIC, &curr_time) != 0 ||
|
|
|
a5a7cf |
- (curr_time.tv_sec - pp->io_err_dis_reinstate_time) >
|
|
|
a5a7cf |
- pp->mpp->marginal_path_err_recheck_gap_time) {
|
|
|
a5a7cf |
+ get_monotonic_time(&curr_time);
|
|
|
a5a7cf |
+ if ((curr_time.tv_sec - pp->io_err_dis_reinstate_time) >
|
|
|
a5a7cf |
+ pp->mpp->marginal_path_err_recheck_gap_time) {
|
|
|
a5a7cf |
io_err_stat_log(4, "%s: reschedule checking after %d seconds",
|
|
|
a5a7cf |
pp->dev,
|
|
|
a5a7cf |
pp->mpp->marginal_path_err_recheck_gap_time);
|
|
|
a5a7cf |
@@ -410,8 +409,7 @@ static int io_err_stat_time_up(struct io_err_stat_path *pp)
|
|
|
a5a7cf |
{
|
|
|
a5a7cf |
struct timespec currtime, difftime;
|
|
|
a5a7cf |
|
|
|
a5a7cf |
- if (clock_gettime(CLOCK_MONOTONIC, &currtime) != 0)
|
|
|
a5a7cf |
- return 0;
|
|
|
a5a7cf |
+ get_monotonic_time(&currtime);
|
|
|
a5a7cf |
timespecsub(&currtime, &pp->start_time, &difftime);
|
|
|
a5a7cf |
if (difftime.tv_sec < pp->total_time)
|
|
|
a5a7cf |
return 0;
|
|
|
a5a7cf |
@@ -424,8 +422,7 @@ static void end_io_err_stat(struct io_err_stat_path *pp)
|
|
|
a5a7cf |
struct path *path;
|
|
|
a5a7cf |
double err_rate;
|
|
|
a5a7cf |
|
|
|
a5a7cf |
- if (clock_gettime(CLOCK_MONOTONIC, &currtime) != 0)
|
|
|
a5a7cf |
- currtime = pp->start_time;
|
|
|
a5a7cf |
+ get_monotonic_time(&currtime);
|
|
|
a5a7cf |
|
|
|
a5a7cf |
io_err_stat_log(4, "%s: check end", pp->devname);
|
|
|
a5a7cf |
|
|
|
a5a7cf |
@@ -474,11 +471,7 @@ static int send_each_async_io(struct dio_ctx *ct, int fd, char *dev)
|
|
|
a5a7cf |
ct->io_starttime.tv_sec == 0) {
|
|
|
a5a7cf |
struct iocb *ios[1] = { &ct->io };
|
|
|
a5a7cf |
|
|
|
a5a7cf |
- if (clock_gettime(CLOCK_MONOTONIC, &ct->io_starttime) != 0) {
|
|
|
a5a7cf |
- ct->io_starttime.tv_sec = 0;
|
|
|
a5a7cf |
- ct->io_starttime.tv_nsec = 0;
|
|
|
a5a7cf |
- return rc;
|
|
|
a5a7cf |
- }
|
|
|
a5a7cf |
+ get_monotonic_time(&ct->io_starttime);
|
|
|
a5a7cf |
io_prep_pread(&ct->io, fd, ct->buf, ct->blksize, 0);
|
|
|
a5a7cf |
if (io_submit(ioctx, 1, ios) != 1) {
|
|
|
a5a7cf |
io_err_stat_log(5, "%s: io_submit error %i",
|
|
|
a5a7cf |
@@ -497,8 +490,7 @@ static void send_batch_async_ios(struct io_err_stat_path *pp)
|
|
|
a5a7cf |
struct dio_ctx *ct;
|
|
|
a5a7cf |
struct timespec currtime, difftime;
|
|
|
a5a7cf |
|
|
|
a5a7cf |
- if (clock_gettime(CLOCK_MONOTONIC, &currtime) != 0)
|
|
|
a5a7cf |
- return;
|
|
|
a5a7cf |
+ get_monotonic_time(&currtime);
|
|
|
a5a7cf |
/*
|
|
|
a5a7cf |
* Give a free time for all IO to complete or timeout
|
|
|
a5a7cf |
*/
|
|
|
a5a7cf |
@@ -513,11 +505,8 @@ static void send_batch_async_ios(struct io_err_stat_path *pp)
|
|
|
a5a7cf |
if (!send_each_async_io(ct, pp->fd, pp->devname))
|
|
|
a5a7cf |
pp->io_nr++;
|
|
|
a5a7cf |
}
|
|
|
a5a7cf |
- if (pp->start_time.tv_sec == 0 && pp->start_time.tv_nsec == 0 &&
|
|
|
a5a7cf |
- clock_gettime(CLOCK_MONOTONIC, &pp->start_time)) {
|
|
|
a5a7cf |
- pp->start_time.tv_sec = 0;
|
|
|
a5a7cf |
- pp->start_time.tv_nsec = 0;
|
|
|
a5a7cf |
- }
|
|
|
a5a7cf |
+ if (pp->start_time.tv_sec == 0 && pp->start_time.tv_nsec == 0)
|
|
|
a5a7cf |
+ get_monotonic_time(&pp->start_time);
|
|
|
a5a7cf |
}
|
|
|
a5a7cf |
|
|
|
a5a7cf |
static int try_to_cancel_timeout_io(struct dio_ctx *ct, struct timespec *t,
|
|
|
a5a7cf |
@@ -556,8 +545,7 @@ static void poll_async_io_timeout(void)
|
|
|
a5a7cf |
int rc = PATH_UNCHECKED;
|
|
|
a5a7cf |
int i, j;
|
|
|
a5a7cf |
|
|
|
a5a7cf |
- if (clock_gettime(CLOCK_MONOTONIC, &curr_time) != 0)
|
|
|
a5a7cf |
- return;
|
|
|
a5a7cf |
+ get_monotonic_time(&curr_time);
|
|
|
a5a7cf |
vector_foreach_slot(io_err_pathvec, pp, i) {
|
|
|
a5a7cf |
for (j = 0; j < CONCUR_NR_EVENT; j++) {
|
|
|
a5a7cf |
rc = try_to_cancel_timeout_io(pp->dio_ctx_array + j,
|
|
|
a5a7cf |
--
|
|
|
a5a7cf |
2.17.2
|
|
|
a5a7cf |
|