Make zfsd(8) listen to GEOM::physpath events
zfsd should use a newly arrived device for autoreplace by physical path
operations, even if that device's physical path isn't known when zfsd first
becomes aware of the device.
Background: When a new device arrives, devfs emits a CREATE event to devctl(4).
In parallel, enc(4) assigns a physical path to it, then geom(4) emits a
GEOM::physpath event. It's possible that zfsd will see the CREATE event before
the physical path has been assigned. Previously, we would ignore such a
device. Now, zfsd(8) will listen to the GEOM::physpath event so it can use the
device for autoreplace-by-physical-path actions.
lib/libdevctl/event.cc:
lib/libdevctl/event.h:
lib/libdevctl/tests/libdevctl_unittest.cc
Provide GeomEvent objects.
Move
DevfsEvent::{Devname,IsDiskDev,PhysicalPath,DevPath}
into the base Event class. Only DevName needs to be
specialized in the derived classes.
cddl/sbin/zfsd/zfsd.cc
cddl/sbin/zfsd/zfsd_event.cc
cddl/sbin/zfsd/zfsd_event.h
Listen for GEOM::physpath events. When one arrives,
ReEvaluate any matching caseFiles.
Sponsored by: Spectra Logic Corp