Skip /dev/hpet during 'zpool import'
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 12 Nov 2010 17:33:17 +0000 (09:33 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 12 Nov 2010 17:33:17 +0000 (09:33 -0800)
If libblkid does not contain ZFS support, then 'zpool import' will scan
all block devices in /dev/ to determine which ones are components of a
ZFS filesystem.  It does this by opening all the devices and stat'ing
them to determine which ones are block devices.  If the device turns
out not to be a block device it is skipped.

Usually, this whole process is pretty harmless (although slow).  But
there are certain devices in /dev/ which must be handled in a very
specific way or your system may crash.  For example, if /dev/watchdog
is simply opened the watchdog timer will be started and your system
will panic when the timer expires.

It turns out the /dev/hpet causes similiar problems although only when
accessed under a virtual machine.  For some reason accessing /dev/hpet
causes qemu to crash.  To address this issue this commit adds /dev/hpet
to the device blacklist, it will be skipped solely based on its name.

lib/libzfs/libzfs_import.c

index ee00648..8668583 100644 (file)
@@ -1086,7 +1086,8 @@ zpool_find_import_impl(libzfs_handle_t *hdl, importargs_t *iarg)
                            (strncmp(name, "vcs", 3) == 0)      ||
                            (strncmp(name, "parport", 7) == 0)  ||
                            (strncmp(name, "lp", 2) == 0)       ||
-                           (strncmp(name, "fd", 2) == 0))
+                           (strncmp(name, "fd", 2) == 0)       ||
+                           (strncmp(name, "hpet", 4) == 0))
                                continue;
 
                        if ((fd = openat64(dfd, name, O_RDONLY)) < 0)