[PATCH] virtiofsd: use g_date_time_get_microsecond to get subsecond

Yusuke Okada posted 1 patch 1 year, 7 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20220818184618.2205172-1-yokada.996@gmail.com
Maintainers: "Dr. David Alan Gilbert" <dgilbert@redhat.com>, Stefan Hajnoczi <stefanha@redhat.com>
tools/virtiofsd/passthrough_ll.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
[PATCH] virtiofsd: use g_date_time_get_microsecond to get subsecond
Posted by Yusuke Okada 1 year, 7 months ago
From: Yusuke Okada <okada.yusuke@jp.fujitsu.com>

The "%f" specifier in g_date_time_format() is only available in glib
2.65.2 or later. If combined with older glib, the function returns null
and the timestamp displayed as "(null)".

For backward compatibility, g_date_time_get_microsecond should be used
to retrieve subsecond.

In this patch the g_date_time_format() leaves subsecond field as "%06d"
and let next snprintf to format with g_date_time_get_microsecond.

Signed-off-by: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
---
 tools/virtiofsd/passthrough_ll.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tools/virtiofsd/passthrough_ll.c b/tools/virtiofsd/passthrough_ll.c
index 371a7bead6..20f0f41f99 100644
--- a/tools/virtiofsd/passthrough_ll.c
+++ b/tools/virtiofsd/passthrough_ll.c
@@ -4185,6 +4185,7 @@ 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;
+    char buf[64];
 
     if (current_log_level < level) {
         return;
@@ -4197,9 +4198,11 @@ static void log_func(enum fuse_log_level level, const char *fmt, va_list ap)
                                        fmt);
         } else {
             g_autoptr(GDateTime) now = g_date_time_new_now_utc();
-            g_autofree char *nowstr = g_date_time_format(now, "%Y-%m-%d %H:%M:%S.%f%z");
+            g_autofree char *nowstr = g_date_time_format(now,
+                                       "%Y-%m-%d %H:%M:%S.%%06d%z");
+            snprintf(buf, 64, nowstr, g_date_time_get_microsecond(now));
             localfmt = g_strdup_printf("[%s] [ID: %08ld] %s",
-                                       nowstr, syscall(__NR_gettid), fmt);
+                                       buf, syscall(__NR_gettid), fmt);
         }
         fmt = localfmt;
     }
-- 
2.31.1
Re: [PATCH] virtiofsd: use g_date_time_get_microsecond to get subsecond
Posted by Stefan Hajnoczi 1 year, 7 months ago
On Thu, Aug 18, 2022 at 02:46:19PM -0400, Yusuke Okada wrote:
> From: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
> 
> The "%f" specifier in g_date_time_format() is only available in glib
> 2.65.2 or later. If combined with older glib, the function returns null
> and the timestamp displayed as "(null)".
> 
> For backward compatibility, g_date_time_get_microsecond should be used
> to retrieve subsecond.
> 
> In this patch the g_date_time_format() leaves subsecond field as "%06d"
> and let next snprintf to format with g_date_time_get_microsecond.
> 
> Signed-off-by: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
> ---
>  tools/virtiofsd/passthrough_ll.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)

Thanks, applied to my block tree for QEMU 7.2:
https://gitlab.com/stefanha/qemu/commits/block

Stefan
Re: [Virtio-fs] [PATCH] virtiofsd: use g_date_time_get_microsecond to get subsecond
Posted by Vivek Goyal 1 year, 6 months ago
On Wed, Aug 24, 2022 at 01:41:29PM -0400, Stefan Hajnoczi wrote:
> On Thu, Aug 18, 2022 at 02:46:19PM -0400, Yusuke Okada wrote:
> > From: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
> > 
> > The "%f" specifier in g_date_time_format() is only available in glib
> > 2.65.2 or later. If combined with older glib, the function returns null
> > and the timestamp displayed as "(null)".
> > 
> > For backward compatibility, g_date_time_get_microsecond should be used
> > to retrieve subsecond.
> > 
> > In this patch the g_date_time_format() leaves subsecond field as "%06d"
> > and let next snprintf to format with g_date_time_get_microsecond.
> > 
> > Signed-off-by: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
> > ---
> >  tools/virtiofsd/passthrough_ll.c | 7 +++++--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> Thanks, applied to my block tree for QEMU 7.2:
> https://gitlab.com/stefanha/qemu/commits/block

Hi Stefan,

Wondering when do you plan to send it for merge. This seems like
a simple fix. Not sure why it does not qualify as a fix for
7.1 instead.

Thanks
Vivek
Re: [Virtio-fs] [PATCH] virtiofsd: use g_date_time_get_microsecond to get subsecond
Posted by Stefan Hajnoczi 1 year, 6 months ago
On Tue, 20 Sept 2022 at 19:08, Vivek Goyal <vgoyal@redhat.com> wrote:
>
> On Wed, Aug 24, 2022 at 01:41:29PM -0400, Stefan Hajnoczi wrote:
> > On Thu, Aug 18, 2022 at 02:46:19PM -0400, Yusuke Okada wrote:
> > > From: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
> > >
> > > The "%f" specifier in g_date_time_format() is only available in glib
> > > 2.65.2 or later. If combined with older glib, the function returns null
> > > and the timestamp displayed as "(null)".
> > >
> > > For backward compatibility, g_date_time_get_microsecond should be used
> > > to retrieve subsecond.
> > >
> > > In this patch the g_date_time_format() leaves subsecond field as "%06d"
> > > and let next snprintf to format with g_date_time_get_microsecond.
> > >
> > > Signed-off-by: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
> > > ---
> > >  tools/virtiofsd/passthrough_ll.c | 7 +++++--
> > >  1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > Thanks, applied to my block tree for QEMU 7.2:
> > https://gitlab.com/stefanha/qemu/commits/block
>
> Hi Stefan,
>
> Wondering when do you plan to send it for merge. This seems like
> a simple fix. Not sure why it does not qualify as a fix for
> 7.1 instead.

The pull request with this patch was merged into qemu.git/master today.

Regarding 7.1, it needs to go through the -stable tree. I have CCed
qemu-stable so this patch can be picked up.

Thanks,
Stefan
Re: [PATCH] virtiofsd: use g_date_time_get_microsecond to get subsecond
Posted by Dr. David Alan Gilbert 1 year, 7 months ago
* Yusuke Okada (yokada.996@gmail.com) wrote:
> From: Yusuke Okada <okada.yusuke@jp.fujitsu.com>
> 
> The "%f" specifier in g_date_time_format() is only available in glib
> 2.65.2 or later. If combined with older glib, the function returns null
> and the timestamp displayed as "(null)".

Well spotted; thanks for the patch.
I notice there's also a use in rocker and qga (Copying Dan and
Marc-Andre in who added them)

> For backward compatibility, g_date_time_get_microsecond should be used
> to retrieve subsecond.
> 
> In this patch the g_date_time_format() leaves subsecond field as "%06d"
> and let next snprintf to format with g_date_time_get_microsecond.
> 
> Signed-off-by: Yusuke Okada <okada.yusuke@jp.fujitsu.com>


Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
>  tools/virtiofsd/passthrough_ll.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/virtiofsd/passthrough_ll.c b/tools/virtiofsd/passthrough_ll.c
> index 371a7bead6..20f0f41f99 100644
> --- a/tools/virtiofsd/passthrough_ll.c
> +++ b/tools/virtiofsd/passthrough_ll.c
> @@ -4185,6 +4185,7 @@ 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;
> +    char buf[64];
>  
>      if (current_log_level < level) {
>          return;
> @@ -4197,9 +4198,11 @@ static void log_func(enum fuse_log_level level, const char *fmt, va_list ap)
>                                         fmt);
>          } else {
>              g_autoptr(GDateTime) now = g_date_time_new_now_utc();
> -            g_autofree char *nowstr = g_date_time_format(now, "%Y-%m-%d %H:%M:%S.%f%z");
> +            g_autofree char *nowstr = g_date_time_format(now,
> +                                       "%Y-%m-%d %H:%M:%S.%%06d%z");
> +            snprintf(buf, 64, nowstr, g_date_time_get_microsecond(now));
>              localfmt = g_strdup_printf("[%s] [ID: %08ld] %s",
> -                                       nowstr, syscall(__NR_gettid), fmt);
> +                                       buf, syscall(__NR_gettid), fmt);
>          }
>          fmt = localfmt;
>      }
> -- 
> 2.31.1
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK