The "udevadm control --exit" fix was not supposed to fix this bug. I still have the (occasional) 60 seconds hang at boot. It is just that '/dev' is now moved to rootfs, enabling the filesystems to be mounted rw.
The very same lvm process which waits for the semaphore is the process which set it to 1. It waits for udevd to call the 55-dm.rules rule
to be processed. But since udevd is not accepting events after "udevadm control --exit", and any event, which arrived before closing the netlink socket, is discarded, 'vgchange -a y' waits forever.
Reading the documentation of dmsetup, I found the udevcomplete_all option. This might be a means to finish hanging 'vgchange -a y' processes, and could be called from within a init-bottom script of initramfs
The "udevadm control --exit" fix was not supposed to fix this bug. I still have the (occasional) 60 seconds hang at boot. It is just that '/dev' is now moved to rootfs, enabling the filesystems to be mounted rw.
The very same lvm process which waits for the semaphore is the process which set it to 1. It waits for udevd to call the 55-dm.rules rule
ENV{DM_ COOKIE} =="?*", RUN+="/sbin/dmsetup udevcomplete $env{DM_COOKIE}"
to be processed. But since udevd is not accepting events after "udevadm control --exit", and any event, which arrived before closing the netlink socket, is discarded, 'vgchange -a y' waits forever.
Reading the documentation of dmsetup, I found the udevcomplete_all option. This might be a means to finish hanging 'vgchange -a y' processes, and could be called from within a init-bottom script of initramfs