Re: [PATCH 7/7] virtiofsd: use GDateTime for formatting timestamp for debug messages

2021-05-06 Thread Dr. David Alan Gilbert
* Dr. David Alan Gilbert (dgilb...@redhat.com) wrote:
> * Dr. David Alan Gilbert (dgilb...@redhat.com) wrote:
> > * Daniel P. Berrangé (berra...@redhat.com) wrote:
> > > The GDateTime APIs provided by GLib avoid portability pitfalls, such
> > > as some platforms where 'struct timeval.tv_sec' field is still 'long'
> > > instead of 'time_t'. When combined with automatic cleanup, GDateTime
> > > often results in simpler code too.
> > > 
> > > Signed-off-by: Daniel P. Berrangé 
> > 
> > Reviewed-by: Dr. David Alan Gilbert 
> 
> Queued this 7/7 via virtiofsd

Hi Dan,
  I've had to drop this because it triggers seccomp:

#0  0x7f0afec4d21b in readlink () from /lib64/libc.so.6
#1  0x7f0afeecff24 in g_file_read_link () from /lib64/libglib-2.0.so.0
#2  0x7f0afef16390 in g_time_zone_new_identifier () from 
/lib64/libglib-2.0.so.0
#3  0x7f0afef16fe8 in g_time_zone_new_local () from /lib64/libglib-2.0.so.0
#4  0x7f0afeec9520 in g_date_time_new_now_local () from 
/lib64/libglib-2.0.so.0
#5  0x55a6bd6bc27a in log_func (level=FUSE_LOG_INFO, fmt=0x55a6bd6e3cda 
"%s: Entry\n", ap=0x7ffece4b2f50) at ../tools/virtiofsd/passthrough_ll.c:3578
#6  0x55a6bd6b3dd5 in fuse_log (level=level@entry=FUSE_LOG_INFO, 
fmt=fmt@entry=0x55a6bd6e3cda "%s: Entry\n") at ../tools/virtiofsd/fuse_log.c:37
#7  0x55a6bd6ba9fd in virtio_loop (se=se@entry=0x55a6bee29a30) at 
../tools/virtiofsd/fuse_virtio.c:878
#8  0x55a6bd6b2017 in main (argc=, argv=) at 
../tools/virtiofsd/passthrough_ll.c:3868


so you either need to add seccomp rules and/or persuade it not to moan;
maybe dropping down to UTC would work.

Dave

> > > ---
> > >  tools/virtiofsd/passthrough_ll.c | 25 -
> > >  1 file changed, 4 insertions(+), 21 deletions(-)
> > > 
> > > diff --git a/tools/virtiofsd/passthrough_ll.c 
> > > b/tools/virtiofsd/passthrough_ll.c
> > > index 1553d2ef45..cdd224918c 100644
> > > --- a/tools/virtiofsd/passthrough_ll.c
> > > +++ b/tools/virtiofsd/passthrough_ll.c
> > > @@ -3558,10 +3558,6 @@ static void setup_nofile_rlimit(unsigned long 
> > > rlimit_nofile)
> > >  static void log_func(enum fuse_log_level level, const char *fmt, va_list 
> > > ap)
> > >  {
> > >  g_autofree char *localfmt = NULL;
> > > -struct timespec ts;
> > > -struct tm tm;
> > > -char sec_fmt[sizeof "2020-12-07 18:17:54"];
> > > -char zone_fmt[sizeof "+0100"];
> > >  
> > >  if (current_log_level < level) {
> > >  return;
> > > @@ -3573,23 +3569,10 @@ static void log_func(enum fuse_log_level level, 
> > > const char *fmt, va_list ap)
> > >  localfmt = g_strdup_printf("[ID: %08ld] %s", 
> > > syscall(__NR_gettid),
> > > fmt);
> > >  } else {
> > > -/* try formatting a broken-down timestamp */
> > > -if (clock_gettime(CLOCK_REALTIME, ) != -1 &&
> > > -localtime_r(_sec, ) != NULL &&
> > > -strftime(sec_fmt, sizeof sec_fmt, "%Y-%m-%d %H:%M:%S",
> > > - ) != 0 &&
> > > -strftime(zone_fmt, sizeof zone_fmt, "%z", ) != 0) {
> > > -localfmt = g_strdup_printf("[%s.%02ld%s] [ID: %08ld] %s",
> > > -   sec_fmt,
> > > -   ts.tv_nsec / (10L * 1000 * 
> > > 1000),
> > > -   zone_fmt, 
> > > syscall(__NR_gettid),
> > > -   fmt);
> > > -} else {
> > > -/* fall back to a flat timestamp */
> > > -localfmt = g_strdup_printf("[%" PRId64 "] [ID: %08ld] 
> > > %s",
> > > -   get_clock(), 
> > > syscall(__NR_gettid),
> > > -   fmt);
> > > -}
> > > +g_autoptr(GDateTime) now = g_date_time_new_now_local();
> > > +g_autofree char *nowstr = g_date_time_format(now, "%Y-%m-%d 
> > > %H:%M:%S.%f%z");
> > > +localfmt = g_strdup_printf("[%s] [ID: %08ld] %s",
> > > +   nowstr, syscall(__NR_gettid), 
> > > fmt);
> > >  }
> > >  fmt = localfmt;
> > >  }
> > > -- 
> > > 2.31.1
> > > 
> > -- 
> > Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
> > 
> > 
> -- 
> Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
-- 
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK




Re: [PATCH 7/7] virtiofsd: use GDateTime for formatting timestamp for debug messages

2021-05-06 Thread Dr. David Alan Gilbert
* Dr. David Alan Gilbert (dgilb...@redhat.com) wrote:
> * Daniel P. Berrangé (berra...@redhat.com) wrote:
> > The GDateTime APIs provided by GLib avoid portability pitfalls, such
> > as some platforms where 'struct timeval.tv_sec' field is still 'long'
> > instead of 'time_t'. When combined with automatic cleanup, GDateTime
> > often results in simpler code too.
> > 
> > Signed-off-by: Daniel P. Berrangé 
> 
> Reviewed-by: Dr. David Alan Gilbert 

Queued this 7/7 via virtiofsd

> > ---
> >  tools/virtiofsd/passthrough_ll.c | 25 -
> >  1 file changed, 4 insertions(+), 21 deletions(-)
> > 
> > diff --git a/tools/virtiofsd/passthrough_ll.c 
> > b/tools/virtiofsd/passthrough_ll.c
> > index 1553d2ef45..cdd224918c 100644
> > --- a/tools/virtiofsd/passthrough_ll.c
> > +++ b/tools/virtiofsd/passthrough_ll.c
> > @@ -3558,10 +3558,6 @@ static void setup_nofile_rlimit(unsigned long 
> > rlimit_nofile)
> >  static void log_func(enum fuse_log_level level, const char *fmt, va_list 
> > ap)
> >  {
> >  g_autofree char *localfmt = NULL;
> > -struct timespec ts;
> > -struct tm tm;
> > -char sec_fmt[sizeof "2020-12-07 18:17:54"];
> > -char zone_fmt[sizeof "+0100"];
> >  
> >  if (current_log_level < level) {
> >  return;
> > @@ -3573,23 +3569,10 @@ static void log_func(enum fuse_log_level level, 
> > const char *fmt, va_list ap)
> >  localfmt = g_strdup_printf("[ID: %08ld] %s", 
> > syscall(__NR_gettid),
> > fmt);
> >  } else {
> > -/* try formatting a broken-down timestamp */
> > -if (clock_gettime(CLOCK_REALTIME, ) != -1 &&
> > -localtime_r(_sec, ) != NULL &&
> > -strftime(sec_fmt, sizeof sec_fmt, "%Y-%m-%d %H:%M:%S",
> > - ) != 0 &&
> > -strftime(zone_fmt, sizeof zone_fmt, "%z", ) != 0) {
> > -localfmt = g_strdup_printf("[%s.%02ld%s] [ID: %08ld] %s",
> > -   sec_fmt,
> > -   ts.tv_nsec / (10L * 1000 * 
> > 1000),
> > -   zone_fmt, syscall(__NR_gettid),
> > -   fmt);
> > -} else {
> > -/* fall back to a flat timestamp */
> > -localfmt = g_strdup_printf("[%" PRId64 "] [ID: %08ld] %s",
> > -   get_clock(), 
> > syscall(__NR_gettid),
> > -   fmt);
> > -}
> > +g_autoptr(GDateTime) now = g_date_time_new_now_local();
> > +g_autofree char *nowstr = g_date_time_format(now, "%Y-%m-%d 
> > %H:%M:%S.%f%z");
> > +localfmt = g_strdup_printf("[%s] [ID: %08ld] %s",
> > +   nowstr, syscall(__NR_gettid), fmt);
> >  }
> >  fmt = localfmt;
> >  }
> > -- 
> > 2.31.1
> > 
> -- 
> Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK
> 
> 
-- 
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK




Re: [PATCH 7/7] virtiofsd: use GDateTime for formatting timestamp for debug messages

2021-05-05 Thread Dr. David Alan Gilbert
* Daniel P. Berrangé (berra...@redhat.com) wrote:
> The GDateTime APIs provided by GLib avoid portability pitfalls, such
> as some platforms where 'struct timeval.tv_sec' field is still 'long'
> instead of 'time_t'. When combined with automatic cleanup, GDateTime
> often results in simpler code too.
> 
> Signed-off-by: Daniel P. Berrangé 

Reviewed-by: Dr. David Alan Gilbert 

> ---
>  tools/virtiofsd/passthrough_ll.c | 25 -
>  1 file changed, 4 insertions(+), 21 deletions(-)
> 
> diff --git a/tools/virtiofsd/passthrough_ll.c 
> b/tools/virtiofsd/passthrough_ll.c
> index 1553d2ef45..cdd224918c 100644
> --- a/tools/virtiofsd/passthrough_ll.c
> +++ b/tools/virtiofsd/passthrough_ll.c
> @@ -3558,10 +3558,6 @@ static void setup_nofile_rlimit(unsigned long 
> rlimit_nofile)
>  static void log_func(enum fuse_log_level level, const char *fmt, va_list ap)
>  {
>  g_autofree char *localfmt = NULL;
> -struct timespec ts;
> -struct tm tm;
> -char sec_fmt[sizeof "2020-12-07 18:17:54"];
> -char zone_fmt[sizeof "+0100"];
>  
>  if (current_log_level < level) {
>  return;
> @@ -3573,23 +3569,10 @@ static void log_func(enum fuse_log_level level, const 
> char *fmt, va_list ap)
>  localfmt = g_strdup_printf("[ID: %08ld] %s", 
> syscall(__NR_gettid),
> fmt);
>  } else {
> -/* try formatting a broken-down timestamp */
> -if (clock_gettime(CLOCK_REALTIME, ) != -1 &&
> -localtime_r(_sec, ) != NULL &&
> -strftime(sec_fmt, sizeof sec_fmt, "%Y-%m-%d %H:%M:%S",
> - ) != 0 &&
> -strftime(zone_fmt, sizeof zone_fmt, "%z", ) != 0) {
> -localfmt = g_strdup_printf("[%s.%02ld%s] [ID: %08ld] %s",
> -   sec_fmt,
> -   ts.tv_nsec / (10L * 1000 * 1000),
> -   zone_fmt, syscall(__NR_gettid),
> -   fmt);
> -} else {
> -/* fall back to a flat timestamp */
> -localfmt = g_strdup_printf("[%" PRId64 "] [ID: %08ld] %s",
> -   get_clock(), syscall(__NR_gettid),
> -   fmt);
> -}
> +g_autoptr(GDateTime) now = g_date_time_new_now_local();
> +g_autofree char *nowstr = g_date_time_format(now, "%Y-%m-%d 
> %H:%M:%S.%f%z");
> +localfmt = g_strdup_printf("[%s] [ID: %08ld] %s",
> +   nowstr, syscall(__NR_gettid), fmt);
>  }
>  fmt = localfmt;
>  }
> -- 
> 2.31.1
> 
-- 
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK