Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Oct 2013 20:59:17 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r256454 - projects/zfsd/head/cddl/sbin/zfsd
Message-ID:  <201310142059.r9EKxIs7053352@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Mon Oct 14 20:59:17 2013
New Revision: 256454
URL: http://svnweb.freebsd.org/changeset/base/256454

Log:
  Remove information about devd reconnection policies that was distributed within
  comments and syslog() strings in functions well below where these decisions are
  made.
  
  	stable/cddl/sbin/zfsd/zfsd.cc:
  		o In ZfsDaemon::DisconnectFromDevd(), log when the
  		  connection is torn down.  This removes the need to
  		  guess that this will happen in comments or log strings
  		  in code that all eventually sends us to this function.
  		o In ZfsDaemon::EventsPending(), treat poll returning
  		  -1 with an errno other than EINTR, or 0 as a program
  		  terminating event just as it is in the other case
  		  where we invoke poll.  These events indicate poll or
  		  our code is seriously broken.
  		o In ZfsDaemon::EventsPending(), prioritize emitting
  		  a POLLERR event over POLLHUP in case they are both
  		  set.  POLLHUP is benign, but POLLERR may indicate
  		  something we need to investigate.
  		o In ZfsDaemon::EventLoop(), remove comments and log
  		  strings that claim knowledge of policy implemented
  		  in EventLoop's caller, ZfsDaemon::Run().
  
  Submitted by:	gibbs
  Approved by:	ken (mentor)
  Obtained from:	Spectra Logic Corporation

Modified:
  projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc

Modified: projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc
==============================================================================
--- projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc	Mon Oct 14 20:56:51 2013	(r256453)
+++ projects/zfsd/head/cddl/sbin/zfsd/zfsd.cc	Mon Oct 14 20:59:17 2013	(r256454)
@@ -450,6 +450,9 @@ ZfsDaemon::ConnectToDevd()
 void
 ZfsDaemon::DisconnectFromDevd()
 {
+	if (s_devdSockFD != -1)
+		syslog(LOG_INFO, "Disconnecting from devd.");
+
 	delete s_reader;
 	s_reader = NULL;
 	close(s_devdSockFD);
@@ -520,25 +523,19 @@ ZfsDaemon::EventsPending()
 		result = poll(fds, NUM_ELEMENTS(fds), /*timeout*/0);
 	} while (result == -1 && errno == EINTR);
 
-	if (result == -1) {
-		/* Unexpected error; try reconnecting the socket */
-		throw ZfsdException("ZfsdDaemon::EventsPending(): "
-				    "Unexpected error from poll()");
-	}
+	if (result == -1)
+		err(1, "Polling for devd events failed");
 
-	if ((fds->revents & POLLHUP) != 0) {
-		/*
-		 * The other end hung up the socket.  Throw an exception
-		 * so ZfsDaemon will try to reconnect
-		 */
-		throw ZfsdException("ZfsDaemon::EventsPending(): Got POLLHUP");
-	}
+	if (result == 0)
+		errx(1, "Unexpected result of 0 from poll. Exiting");
 
-	if ((fds->revents & POLLERR) != 0) {
-		/* Try reconnecting. */
-		throw ZfsdException("ZfsdDaemon:EventsPending(): Got POLLERR. "
-				    " Reconnecting.");
-	}
+	if ((fds->revents & POLLERR) != 0)
+		throw ZfsdException("ZfsdDaemon:EventsPending(): "
+				    "POLLERR detected on devd socket.");
+
+	if ((fds->revents & POLLHUP) != 0)
+		throw ZfsdException("ZfsDaemon::EventsPending(): "
+				    "POLLHUP detected on devd socket.");
 
 	return ((fds->revents & POLLIN) != 0);
 }
@@ -692,14 +689,12 @@ ZfsDaemon::EventLoop()
 		}
 
 		if ((fds[0].revents & POLLERR) != 0) {
-			/* Try reconnecting. */
-			syslog(LOG_INFO, "Error on socket. Disconnecting.");
+			syslog(LOG_INFO, "POLLERROR detected on devd socket.");
 			break;
 		}
 
 		if ((fds[0].revents & POLLHUP) != 0) {
-			/* Try reconnecting. */
-			syslog(LOG_INFO, "Hup on socket. Disconnecting.");
+			syslog(LOG_INFO, "POLLHUP detected on devd socket.");
 			break;
 		}
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310142059.r9EKxIs7053352>