Comment 5 for bug 833891

Revision history for this message
Boris Devouge (bdevouge) wrote :

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:
(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)