svn commit: r329344 - head/cddl/usr.sbin/zfsd

Alan Somers asomers at FreeBSD.org
Thu Feb 15 21:30:32 UTC 2018


Author: asomers
Date: Thu Feb 15 21:30:30 2018
New Revision: 329344
URL: https://svnweb.freebsd.org/changeset/base/329344

Log:
  Optimize zfsd for the happy case
  
  If there are no damaged pools, then ignore all GEOM events.  We only use
  them to fix damaged pools.  However, still pay attention to ZFS events.
  
  MFC after:	20 days
  X-MFC-With:	329284
  Sponsored by:	Spectra Logic Corp

Modified:
  head/cddl/usr.sbin/zfsd/case_file.cc
  head/cddl/usr.sbin/zfsd/case_file.h
  head/cddl/usr.sbin/zfsd/zfsd_event.cc

Modified: head/cddl/usr.sbin/zfsd/case_file.cc
==============================================================================
--- head/cddl/usr.sbin/zfsd/case_file.cc	Thu Feb 15 21:27:24 2018	(r329343)
+++ head/cddl/usr.sbin/zfsd/case_file.cc	Thu Feb 15 21:30:30 2018	(r329344)
@@ -186,6 +186,12 @@ CaseFile::DeSerialize()
 	free(caseFiles);
 }
 
+bool
+CaseFile::Empty()
+{
+	return (s_activeCases.empty());
+}
+
 void
 CaseFile::LogAll()
 {

Modified: head/cddl/usr.sbin/zfsd/case_file.h
==============================================================================
--- head/cddl/usr.sbin/zfsd/case_file.h	Thu Feb 15 21:27:24 2018	(r329343)
+++ head/cddl/usr.sbin/zfsd/case_file.h	Thu Feb 15 21:30:30 2018	(r329344)
@@ -135,6 +135,11 @@ class CaseFile (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();

Modified: head/cddl/usr.sbin/zfsd/zfsd_event.cc
==============================================================================
--- head/cddl/usr.sbin/zfsd/zfsd_event.cc	Thu Feb 15 21:27:24 2018	(r329343)
+++ head/cddl/usr.sbin/zfsd/zfsd_event.cc	Thu Feb 15 21:30:30 2018	(r329344)
@@ -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);


More information about the svn-src-all mailing list