Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jan 2015 15:46:12 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r277834 - head/usr.sbin/autofs
Message-ID:  <201501281546.t0SFkCaP099219@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Wed Jan 28 15:46:11 2015
New Revision: 277834
URL: https://svnweb.freebsd.org/changeset/base/277834

Log:
  When there are no automounted filesystems, autounmountd(8) should wait
  for filesystem event, instead of looping on a timeout.
  
  MFC after:	1 month
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/usr.sbin/autofs/autounmountd.c

Modified: head/usr.sbin/autofs/autounmountd.c
==============================================================================
--- head/usr.sbin/autofs/autounmountd.c	Wed Jan 28 15:37:35 2015	(r277833)
+++ head/usr.sbin/autofs/autounmountd.c	Wed Jan 28 15:46:11 2015	(r277834)
@@ -182,7 +182,7 @@ expire_automounted(double expiration_tim
 {
 	struct automounted_fs *af, *tmpaf;
 	time_t now;
-	double mounted_for, mounted_max = 0;
+	double mounted_for, mounted_max = -1.0;
 	int error;
 
 	now = time(NULL);
@@ -231,21 +231,28 @@ do_wait(int kq, double sleep_time)
 {
 	struct timespec timeout;
 	struct kevent unused;
-	int error;
-
-	assert(sleep_time > 0);
-	timeout.tv_sec = sleep_time;
-	timeout.tv_nsec = 0;
+	int nevents;
 
-	log_debugx("waiting for filesystem event for %.0f seconds", sleep_time);
-	error = kevent(kq, NULL, 0, &unused, 1, &timeout);
-	if (error < 0)
+	if (sleep_time != -1.0) {
+		assert(sleep_time > 0.0);
+		timeout.tv_sec = sleep_time;
+		timeout.tv_nsec = 0;
+
+		log_debugx("waiting for filesystem event for %.0f seconds", sleep_time);
+		nevents = kevent(kq, NULL, 0, &unused, 1, &timeout);
+	} else {
+		log_debugx("waiting for filesystem event");
+		nevents = kevent(kq, NULL, 0, &unused, 1, NULL);
+	}
+	if (nevents < 0)
 		log_err(1, "kevent");
 
-	if (error == 0)
+	if (nevents == 0) {
 		log_debugx("timeout reached");
-	else
+		assert(sleep_time > 0.0);
+	} else {
 		log_debugx("got filesystem event");
+	}
 }
 
 int
@@ -324,7 +331,10 @@ main_autounmountd(int argc, char **argv)
 	for (;;) {
 		refresh_automounted();
 		mounted_max = expire_automounted(expiration_time);
-		if (mounted_max < expiration_time) {
+		if (mounted_max == -1.0) {
+			sleep_time = mounted_max;
+			log_debugx("no filesystems to expire");
+		} else if (mounted_max < expiration_time) {
 			sleep_time = difftime(expiration_time, mounted_max);
 			log_debugx("some filesystems expire in %.0f seconds",
 			    sleep_time);



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