aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cddl/usr.sbin/zfsd/case_file.cc6
-rw-r--r--cddl/usr.sbin/zfsd/case_file.h5
-rw-r--r--cddl/usr.sbin/zfsd/zfsd_event.cc12
3 files changed, 21 insertions, 2 deletions
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
@@ -135,6 +135,11 @@ public:
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.
*/
static void LogAll();
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);