qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 059/104] virtiofsd: Add ID to the log with FUSE_LOG_DEBUG lev


From: Dr. David Alan Gilbert
Subject: Re: [PATCH 059/104] virtiofsd: Add ID to the log with FUSE_LOG_DEBUG level
Date: Mon, 6 Jan 2020 17:47:09 +0000
User-agent: Mutt/1.13.0 (2019-11-30)

* Daniel P. Berrangé (address@hidden) wrote:
> On Thu, Dec 12, 2019 at 04:38:19PM +0000, Dr. David Alan Gilbert (git) wrote:
> > From: Masayoshi Mizuma <address@hidden>
> > 
> > virtiofsd has some threads, so we see a lot of logs with debug option.
> > It would be useful for debugging if we can identify the specific thread
> > from the log.
> > 
> > Add ID, which is got by gettid(), to the log with FUSE_LOG_DEBUG level
> > so that we can grep the specific thread.
> > 
> > The log is like as:
> > 
> >   ]# ./virtiofsd -d -o vhost_user_socket=/tmp/vhostqemu0 -o 
> > source=/tmp/share0 -o cache=auto
> >   ...
> >   [ID: 00000097]    unique: 12696, success, outsize: 120
> >   [ID: 00000097] virtio_send_msg: elem 18: with 2 in desc of length 120
> >   [ID: 00000003] fv_queue_thread: Got queue event on Queue 1
> >   [ID: 00000003] fv_queue_thread: Queue 1 gave evalue: 1 available: in: 
> > 65552 out: 80
> >   [ID: 00000003] fv_queue_thread: Waiting for Queue 1 event
> >   [ID: 00000071] fv_queue_worker: elem 33: with 2 out desc of length 80 
> > bad_in_num=0 bad_out_num=0
> >   [ID: 00000071] unique: 12694, opcode: READ (15), nodeid: 2, insize: 80, 
> > pid: 2014
> >   [ID: 00000071] lo_read(ino=2, size=65536, off=131072)
> > 
> > Signed-off-by: Masayoshi Mizuma <address@hidden>
> > ---
> >  tools/virtiofsd/passthrough_ll.c | 13 ++++++++++++-
> >  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> > 
> > diff --git a/tools/virtiofsd/passthrough_ll.c 
> > b/tools/virtiofsd/passthrough_ll.c
> > index 6f398a7ff2..8e00a90e6f 100644
> > --- a/tools/virtiofsd/passthrough_ll.c
> > +++ b/tools/virtiofsd/passthrough_ll.c
> > @@ -42,6 +42,7 @@
> >  #include <cap-ng.h>
> >  #include <dirent.h>
> >  #include <errno.h>
> > +#include <glib.h>
> >  #include <inttypes.h>
> >  #include <limits.h>
> >  #include <pthread.h>
> > @@ -2248,12 +2249,18 @@ static void setup_nofile_rlimit(void)
> >      }
> >  }
> >  
> > -static void log_func(enum fuse_log_level level, const char *fmt, va_list 
> > ap)
> > +static void log_func(enum fuse_log_level level, const char *_fmt, va_list 
> > ap)
> >  {
> > +    char *fmt = (char *)_fmt;
> 
> Reusing a variable for data that may be const from stack or
> non-const from heap is really gross & asking for trouble.

Yeh, that is a bit of a hack.

> If instead it does:
> 
>     g_autofree *localfmt = NULL;

                 ^ char

> > +
> >      if (current_log_level < level) {
> >          return;
> >      }
> >  
> > +    if (current_log_level == FUSE_LOG_DEBUG) {
> > +        fmt = g_strdup_printf("[ID: %08ld] %s", syscall(__NR_gettid), 
> > _fmt);
> 
> Then:
> 
>            localfmt = g_strdup_printf(....)
>          fmt = localfmt;
> 
> > +    }
> > +
> >      if (use_syslog) {
> >          int priority = LOG_ERR;
> >          switch (level) {
> > @@ -2286,6 +2293,10 @@ static void log_func(enum fuse_log_level level, 
> > const char *fmt, va_list ap)
> >      } else {
> >          vfprintf(stderr, fmt, ap);
> >      }
> > +
> > +    if (current_log_level == FUSE_LOG_DEBUG) {
> > +        g_free(fmt);
> > +    }
> 
> This can then be deleted.

Yes, that works nicely.

Dave

> >  }
> 
> Regards,
> Daniel
> -- 
> |: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org         -o-            https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK




reply via email to

[Prev in Thread] Current Thread [Next in Thread]