dump_conf - delay extra 2s before looking for dumpdev
authorAlex Hornung <ahornung@gmail.com>
Tue, 6 Mar 2012 00:30:11 +0000 (00:30 +0000)
committerAlex Hornung <ahornung@gmail.com>
Tue, 6 Mar 2012 00:33:09 +0000 (00:33 +0000)
 * This is the same hack used for the root mount. Some disk devices will
   not be probed by CAM's initial probes.

 * We give these devices some extra time to settle and hopefully be
   ready for when we look them up.

 * This fixes the use of some CAM disk devices set via the loader dumpdev
   variable.

sys/kern/kern_shutdown.c

index faf5ae9..25dd2cb 100644 (file)
@@ -661,10 +661,22 @@ dump_conf(void *dummy)
 {
        char *path;
        cdev_t dev;
+       int _dummy;
 
        path = kmalloc(MNAMELEN, M_TEMP, M_WAITOK);
        if (TUNABLE_STR_FETCH("dumpdev", path, MNAMELEN) != 0) {
+               /*
+                * Make sure all disk devices created so far have also been
+                * probed, and also make sure that the newly created device
+                * nodes for probed disks are ready, too.
+                *
+                * XXX - Delay an additional 2 seconds to help drivers which
+                *       pickup devices asynchronously and are not caught by
+                *       CAM's initial probe.
+                */
                sync_devs();
+               tsleep(&_dummy, 0, "syncer", hz*2);
+
                dev = kgetdiskbyname(path);
                if (dev != NULL)
                        dumpdev = dev;