diff --git a/support/export/export.c b/support/export/export.c
index ce714d4..e1bebce 100644
--- a/support/export/export.c
+++ b/support/export/export.c
@@ -69,8 +69,9 @@ static void warn_duplicated_exports(nfs_export *exp, struct exportent *eep)
  * export_read - read entries from /etc/exports
  * @fname: name of file to read from
  *
+ * Returns number of read entries.
  */
-void
+int
 export_read(char *fname)
 {
 	struct exportent	*eep;
@@ -82,16 +83,16 @@ export_read(char *fname)
 	while ((eep = getexportent(0,1)) != NULL) {
 		exp = export_lookup(eep->e_hostname, eep->e_path, 0);
 		if (!exp) {
-			exp = export_create(eep, 0);
-			if (exp)
+			if (export_create(eep, 0))
+				/* possible complaints already logged */
 				volumes++;
 		}
 		else
 			warn_duplicated_exports(exp, eep);
 	}
 	endexportent();
-	if (volumes == 0)
-		xlog(L_ERROR, "No file systems exported!");
+
+	return volumes;
 }
 
 /**
diff --git a/support/include/exportfs.h b/support/include/exportfs.h
index 97b2327..faa9f0b 100644
--- a/support/include/exportfs.h
+++ b/support/include/exportfs.h
@@ -133,7 +133,7 @@ struct addrinfo *		client_resolve(const struct sockaddr *sap);
 int 				client_member(const char *client,
 						const char *name);
 
-void				export_read(char *fname);
+int				export_read(char *fname);
 void				export_reset(nfs_export *);
 nfs_export *			export_lookup(char *hname, char *path, int caconical);
 nfs_export *			export_find(const struct addrinfo *ai,
diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
index c06f2aa..b7d8578 100644
--- a/utils/exportfs/exportfs.c
+++ b/utils/exportfs/exportfs.c
@@ -47,7 +47,7 @@ static void	error(nfs_export *exp, int err);
 static void	usage(const char *progname, int n);
 static void	validate_export(nfs_export *exp);
 static int	matchhostname(const char *hostname1, const char *hostname2);
-static void	export_d_read(const char *dname);
+static int	export_d_read(const char *dname);
 static void grab_lockfile(void);
 static void release_lockfile(void);
 
@@ -185,8 +185,11 @@ main(int argc, char **argv)
 	atexit(release_lockfile);
 
 	if (f_export && ! f_ignore) {
-		export_read(_PATH_EXPORTS);
-		export_d_read(_PATH_EXPORTS_D);
+		if (! (export_read(_PATH_EXPORTS) +
+		       export_d_read(_PATH_EXPORTS_D))) {
+			if (f_verbose)
+				xlog(L_WARNING, "No file systems exported!");
+		}
 	}
 	if (f_export) {
 		if (f_all)
@@ -699,21 +702,22 @@ out:
 
 /* Based on mnt_table_parse_dir() in
    util-linux-ng/shlibs/mount/src/tab_parse.c */
-static void
+static int
 export_d_read(const char *dname)
 {
 	int n = 0, i;
 	struct dirent **namelist = NULL;
+	int volumes = 0;
 
 
 	n = scandir(dname, &namelist, NULL, versionsort);
 	if (n < 0) {
 		if (errno == ENOENT)
 			/* Silently return */
-			return;
+			return volumes;
 		xlog(L_NOTICE, "scandir %s: %s", dname, strerror(errno));
 	} else if (n == 0)
-		return;
+		return volumes;
 
 	for (i = 0; i < n; i++) {
 		struct dirent *d = namelist[i];
@@ -743,14 +747,14 @@ export_d_read(const char *dname)
 			continue;
 		}
 
-		export_read(fname);
+		volumes += export_read(fname);
 	}
 
 	for (i = 0; i < n; i++)
 		free(namelist[i]);
 	free(namelist);
 
-	return;
+	return volumes;
 }
 
 static char
