Why this is needed ------------------ During initrd scripts we load block device modules which asynchronously perform partition scans. These partition checks must have been completed before later parts of the scripts run (in particular, vgscan). Under load, especially for virtual machines, the partition scans aren't completed in time and consequently vgscan doesn't find the volume group containing root, and the virtual machine fails to boot. More detail: http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=241793#c15 scsi_wait_scan -------------- SCSI devices have a similar problem. This is solved by scsi_wait_scan, a sort of virtual module which is loaded into the kernel and synchronously waits for all SCSI buses to be scanned (it is then unloaded right afterwards). This has been in the kernel since late last year. How it works ------------ I've added a list of block devices which are being scanned for partitions (rescan_bdevs). Function rescan_partitions is modified so that during the scan it puts the block device on this list, and takes it off after the scan is completed. I added a function rescan_partitions_wait which checks this list, and while it is non-empty, waits for the scan on the first block device on the list to complete (and repeats, if necessary, until the list is empty). The module (blkdev_scan_wait.ko) just calls rescan_partitions_wait during its init function. How to test ----------- Copy the built module into /lib of an initrd image. Modify /init so that it does: echo Wait for partition scans to complete insmod /lib/blkdev_wait_scan.ko rmmod blkdev_wait_scan mkblkdevs after block devs are loaded but before vgscan is run. Boot it under load (eg. as a Xen guest with lots of guests starting at once or something else stressing the disk). Logs will look something like this (my annotations added): Registering block device major 202 xvda:Loading dm-mod.ko module <-- partition scan starts <6>device-mapper: ioctl: 4.11.0-ioctl (2006-10-12) initialised: dm-devel@redhat.com Loading dm-mirror.ko module Loading dm-zero.ko module Loading dm-snapshot.ko module Making device-mapper control node Wait for partition scans to complete xvda1 xvda2 <---- partition scan completes Scanning logical volumes <---- vgscan starts Reading all physical volumes. This may take a while... Found volume group "VolGroup00" using metadata type lvm2 ----- Signed-off-by: Richard Jones Rich. -- Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/ Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 03798903