root 1378 1 0 1031 560 0 17:28 ? 00:00:00 /lib/udev/watershed sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
root 1379 1378 0 1055 588 0 17:28 ? 00:00:00 sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
root 1381 1379 0 8719 14080 0 17:28 ? 00:00:00 /sbin/lvm vgchange -a y
root 1387 1 0 1031 324 0 17:28 ? 00:00:00 /lib/udev/watershed sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
There is clearly 2 incarnations of the udev rule being triggered.
The vgchange command took the LVM lock and waits for some udev event:
(gdb) bt
#0 0x00007fd37e8750f7 in semop () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007fd37ed3863c in dm_udev_wait () from /lib/libdevmapper.so.1.02.1
#2 0x0000000000476d8b in ?? ()
#3 0x0000000000477a9e in dev_manager_activate ()
#4 0x000000000042f15c in ?? ()
#5 0x000000000043069b in ?? ()
#6 0x00000000004311ee in lv_activate_with_filter ()
#7 0x000000000047c5c1 in ?? ()
#8 0x000000000044e8a8 in ?? ()
#9 0x000000000044f4a6 in lock_vol ()
#10 0x0000000000428103 in ?? ()
#11 0x0000000000424036 in ?? ()
#12 0x0000000000424ddd in process_each_vg ()
#13 0x000000000041acd9 in lvm_run_command ()
#14 0x000000000041b4d4 in lvm2_main ()
#15 0x00007fd37e7abeff in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6
#16 0x000000000040f1a9 in _start ()
Apparently the udev event does not arrive, because the second rule instance also triggered vgscan/vgchange, and those cannot proceed because of the flock() taken by the first vgchange.
Any views? What version of liblvm do we plan to ship in 11.10 Oneiric? (2.02.66 seems dated)
So the same deadlock issue was hit again:
root 1378 1 0 1031 560 0 17:28 ? 00:00:00 /lib/udev/watershed sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
root 1379 1378 0 1055 588 0 17:28 ? 00:00:00 sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
root 1381 1379 0 8719 14080 0 17:28 ? 00:00:00 /sbin/lvm vgchange -a y
root 1387 1 0 1031 324 0 17:28 ? 00:00:00 /lib/udev/watershed sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
There is clearly 2 incarnations of the udev rule being triggered.
The vgchange command took the LVM lock and waits for some udev event: 64-linux- gnu/libc. so.6 er.so.1. 02.1 activate () with_filter () 64-linux- gnu/libc. so.6
(gdb) bt
#0 0x00007fd37e8750f7 in semop () from /lib/x86_
#1 0x00007fd37ed3863c in dm_udev_wait () from /lib/libdevmapp
#2 0x0000000000476d8b in ?? ()
#3 0x0000000000477a9e in dev_manager_
#4 0x000000000042f15c in ?? ()
#5 0x000000000043069b in ?? ()
#6 0x00000000004311ee in lv_activate_
#7 0x000000000047c5c1 in ?? ()
#8 0x000000000044e8a8 in ?? ()
#9 0x000000000044f4a6 in lock_vol ()
#10 0x0000000000428103 in ?? ()
#11 0x0000000000424036 in ?? ()
#12 0x0000000000424ddd in process_each_vg ()
#13 0x000000000041acd9 in lvm_run_command ()
#14 0x000000000041b4d4 in lvm2_main ()
#15 0x00007fd37e7abeff in __libc_start_main () from /lib/x86_
#16 0x000000000040f1a9 in _start ()
Apparently the udev event does not arrive, because the second rule instance also triggered vgscan/vgchange, and those cannot proceed because of the flock() taken by the first vgchange.
Any views? What version of liblvm do we plan to ship in 11.10 Oneiric? (2.02.66 seems dated)