Re: [PATCH 2/2] virtlo(g|ck)d: Fix exec-restart

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

 



On Thu, Mar 11, 2021 at 16:47:54 -0700, Jim Fehlig wrote:
> On 3/10/21 9:37 AM, Peter Krempa wrote:
> > Commit 94e45d1042e broke exec-restart of virtlogd and virtlockd as the
> > code waiting for the daemon shutdown closed the daemons before
> > exec-restarting.
> 
> This reminds me of an odd issue we encountered three years ago, fixed by Daniel
> 
> https://listman.redhat.com/archives/libvir-list/2018-March/msg00298.html
> 
> I tested your patches but notice locks are still lost on re-exec.
> 
> qemu.conf:
> lock_manager = "lockd"
> 
> qemu-lockd.conf:
> file_lockspace_dir = "/var/lib/libvirt/lockspace"
> 
> /var/lib/libvirt/lockspace is nothing special, xfs on a local disk. After
> starting a VM
> 
> # ls /var/lib/libvirt/lockspace/
> a89872e150e6b9e4cbd59ef2bd289bc6cd0a8fa6fbf533c41957f77a90381e9c
> # lslocks | grep lockd
> virtlockd       95009  POSIX      WRITE 0          0          0 /var/lib/libvirt/lockspace/a89872e150e6b9e4cbd59ef2bd289bc6cd0a8fa6fbf533c41957f77a90381e9c
> virtlockd       95009  POSIX   5B WRITE 0          0          0 /run/virtlockd.pid
> # systemctl reload virtlockd

Could you make sure that the virtlockd process before and after has the
same pid, so that it wasn't actually restarted by systemct?

I'm asking because in my current test I've encountered another crash
when exec-restarting:

2021-03-12 08:41:31.649+0000: 2765718: error : virJSONValueToBuffer:1946 : internal error: failed to convert virJSONValue to yajl data
double free or corruption (fasttop)

Program received signal SIGABRT, Aborted.
0x00007ffff77819d5 in raise () from /lib64/libc.so.6
(gdb) bt
#0  0x00007ffff77819d5 in raise () at /lib64/libc.so.6
#1  0x00007ffff776a8a4 in abort () at /lib64/libc.so.6
#2  0x00007ffff77c4177 in __libc_message () at /lib64/libc.so.6
#3  0x00007ffff77cbe6c in annobin_top_check.start () at /lib64/libc.so.6
#4  0x00007ffff77cd393 in _int_free () at /lib64/libc.so.6
#5  0x00007ffff7a0b70d in g_free () at /lib64/libglib-2.0.so.0
#6  0x00007ffff7c0977f in virJSONValueFree (value=0x5555555710b0) at ../../../libvirt/src/util/virjson.c:401
#7  0x000055555555c3f2 in glib_autoptr_clear_virJSONValue (_ptr=0x5555555c4250) at ../../../libvirt/src/util/virjson.h:173
#8  glib_autoptr_cleanup_virJSONValue (_ptr=<synthetic pointer>) at ../../../libvirt/src/util/virjson.h:173
#9  virLockDaemonPreExecRestart (argv=0x7fffffffe428, dmn=<optimized out>, state_file=<optimized out>) at ../../../libvirt/src/locking/lock_daemon.c:700
#10 main (argc=<optimized out>, argv=0x7fffffffe428) at ../../../libvirt/src/locking/lock_daemon.c:1148


Looks like a double free. I'll post patches later for this.


> # ls /var/lib/libvirt/lockspace/
> a89872e150e6b9e4cbd59ef2bd289bc6cd0a8fa6fbf533c41957f77a90381e9c
> # lslocks | grep lockd




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux