diff --git a/cddl/usr.sbin/zfsd/case_file.cc b/cddl/usr.sbin/zfsd/case_file.cc index 1ddffae8a884..c14009bdf678 100644 --- a/cddl/usr.sbin/zfsd/case_file.cc +++ b/cddl/usr.sbin/zfsd/case_file.cc @@ -186,6 +186,12 @@ CaseFile::DeSerialize() free(caseFiles); } +bool +CaseFile::Empty() +{ + return (s_activeCases.empty()); +} + void CaseFile::LogAll() { diff --git a/cddl/usr.sbin/zfsd/case_file.h b/cddl/usr.sbin/zfsd/case_file.h index fcb1261f2a67..b4dc2dee5d96 100644 --- a/cddl/usr.sbin/zfsd/case_file.h +++ b/cddl/usr.sbin/zfsd/case_file.h @@ -134,6 +134,11 @@ class CaseFile */ static void DeSerialize(); + /** + * \brief returns true if there are no CaseFiles + */ + static bool Empty(); + /** * \brief Emit syslog data on all active CaseFile%%s in the system. */ diff --git a/cddl/usr.sbin/zfsd/zfsd_event.cc b/cddl/usr.sbin/zfsd/zfsd_event.cc index 50da07631d5a..707a868c67e8 100644 --- a/cddl/usr.sbin/zfsd/zfsd_event.cc +++ b/cddl/usr.sbin/zfsd/zfsd_event.cc @@ -98,8 +98,16 @@ bool GeomEvent::Process() const { /* - * We are only concerned with create arrivals and physical path changes, - * because those can be used to satisfy online and autoreplace operations + * We only use GEOM events to repair damaged pools. So return early if + * there are no damaged pools + */ + if (CaseFile::Empty()) + return (false); + + /* + * We are only concerned with arrivals and physical path changes, + * because those can be used to satisfy online and autoreplace + * operations */ if (Value("type") != "GEOM::physpath" && Value("type") != "CREATE") return (false);