On Thu, Dec 17, 2020 at 12:00:16PM +0100, [email protected] wrote:
> From: Martin Wilck <[email protected]>
> 
> If the root file system is multipathed, and IO is queued because all paths
> are failed, multipathd may block trying to access the root FS, and thus be
> unable to reinstate paths. One file that is frequently accessed is
> /etc/localtime. Avoid that by printing monotonic timestamps instead.
> 
Reviewed-by: Benjamin Marzinski <[email protected]>
> Signed-off-by: Martin Wilck <[email protected]>
> ---
>  libmultipath/debug.c     | 14 ++++++++------
>  libmultipath/devmapper.c | 12 ++++++------
>  libmultipath/log.c       |  1 -
>  multipathd/main.c        |  3 ---
>  4 files changed, 14 insertions(+), 16 deletions(-)
> 
> diff --git a/libmultipath/debug.c b/libmultipath/debug.c
> index 429f269..510e15e 100644
> --- a/libmultipath/debug.c
> +++ b/libmultipath/debug.c
> @@ -14,6 +14,8 @@
>  #include "config.h"
>  #include "defaults.h"
>  #include "debug.h"
> +#include "time-util.h"
> +#include "util.h"
>  
>  int logsink;
>  int libmp_verbosity = DEFAULT_VERBOSITY;
> @@ -25,13 +27,13 @@ void dlog(int prio, const char * fmt, ...)
>       va_start(ap, fmt);
>       if (logsink != LOGSINK_SYSLOG) {
>               if (logsink == LOGSINK_STDERR_WITH_TIME) {
> -                     time_t t = time(NULL);
> -                     struct tm *tb = localtime(&t);
> -                     char buff[16];
> +                     struct timespec ts;
> +                     char buff[32];
>  
> -                     strftime(buff, sizeof(buff),
> -                              "%b %d %H:%M:%S", tb);
> -                     buff[sizeof(buff)-1] = '\0';
> +                     get_monotonic_time(&ts);
> +                     safe_sprintf(buff, "%ld.%06ld",
> +                                  (long)ts.tv_sec,
> +                                  ts.tv_nsec/1000);
>                       fprintf(stderr, "%s | ", buff);
>               }
>               vfprintf(stderr, fmt, ap);
> diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
> index 4977b31..095cbc0 100644
> --- a/libmultipath/devmapper.c
> +++ b/libmultipath/devmapper.c
> @@ -27,6 +27,7 @@
>  #include "config.h"
>  #include "wwids.h"
>  #include "version.h"
> +#include "time-util.h"
>  
>  #include "log_pthread.h"
>  #include <sys/types.h>
> @@ -106,13 +107,12 @@ dm_write_log (int level, const char *file, int line, 
> const char *f, ...)
>       va_start(ap, f);
>       if (logsink != LOGSINK_SYSLOG) {
>               if (logsink == LOGSINK_STDERR_WITH_TIME) {
> -                     time_t t = time(NULL);
> -                     struct tm *tb = localtime(&t);
> -                     char buff[16];
> -
> -                     strftime(buff, sizeof(buff), "%b %d %H:%M:%S", tb);
> -                     buff[sizeof(buff)-1] = '\0';
> +                     struct timespec ts;
> +                     char buff[32];
>  
> +                     get_monotonic_time(&ts);
> +                     safe_sprintf(buff, "%ld.%06ld",
> +                                  (long)ts.tv_sec, ts.tv_nsec/1000);
>                       fprintf(stderr, "%s | ", buff);
>               }
>               fprintf(stderr, "libdevmapper: %s(%i): ", file, line);
> diff --git a/libmultipath/log.c b/libmultipath/log.c
> index 95c8f01..6498c88 100644
> --- a/libmultipath/log.c
> +++ b/libmultipath/log.c
> @@ -120,7 +120,6 @@ void log_reset (char *program_name)
>       pthread_cleanup_push(cleanup_mutex, &logq_lock);
>  
>       closelog();
> -     tzset();
>       openlog(program_name, 0, LOG_DAEMON);
>  
>       pthread_cleanup_pop(1);
> diff --git a/multipathd/main.c b/multipathd/main.c
> index b6a5f5b..28c147b 100644
> --- a/multipathd/main.c
> +++ b/multipathd/main.c
> @@ -2710,9 +2710,6 @@ reconfigure (struct vectors * vecs)
>       delete_all_foreign();
>  
>       reset_checker_classes();
> -     /* Re-read any timezone changes */
> -     tzset();
> -
>       if (bindings_read_only)
>               conf->bindings_read_only = bindings_read_only;
>       check_alias_settings(conf);
> -- 
> 2.29.0

--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to