summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Myers <bpm@sgi.com>2010-02-12 14:02:21 -0500
committerSteve Dickson <steved@redhat.com>2010-02-12 14:21:04 -0500
commit7b0e4faaf3169c69828d3f7769ed8ce9142e100b (patch)
treef174af3471072112481fd30a758fb858468a66b8
parent2ba89d65421cba255a0e75a7f646e4bbb2487193 (diff)
downloadnfs-utils-7b0e4faaf3169c69828d3f7769ed8ce9142e100b.tar.gz
nfs-utils-7b0e4faaf3169c69828d3f7769ed8ce9142e100b.tar.xz
nfs-utils-7b0e4faaf3169c69828d3f7769ed8ce9142e100b.zip
nfs-utils: don't fdatasync the rmtab
If we're using the new caching interface the rmtab will be ignored by exportfs so there is no need to fdatasync. This improves mountd performance. Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--support/nfs/cacheio.c5
-rw-r--r--support/nfs/rmtab.c23
2 files changed, 20 insertions, 8 deletions
diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
index 6a6ed5a..bdf5d84 100644
--- a/support/nfs/cacheio.c
+++ b/support/nfs/cacheio.c
@@ -285,9 +285,8 @@ int readline(int fd, char **buf, int *lenp)
int
check_new_cache(void)
{
- struct stat stb;
- return (stat("/proc/fs/nfs/filehandle", &stb) == 0) ||
- (stat("/proc/fs/nfsd/filehandle", &stb) == 0);
+ return (access("/proc/fs/nfs/filehandle", F_OK) == 0) ||
+ (access("/proc/fs/nfsd/filehandle", F_OK) == 0);
}
diff --git a/support/nfs/rmtab.c b/support/nfs/rmtab.c
index 4cbd285..a28abf3 100644
--- a/support/nfs/rmtab.c
+++ b/support/nfs/rmtab.c
@@ -117,11 +117,24 @@ void
fendrmtabent(FILE *fp)
{
if (fp) {
- /* If it was written to, we really want
- * to flush to disk before returning
- */
- fflush(fp);
- fdatasync(fileno(fp));
+ static int have_new_cache = -1;
+ if (have_new_cache == -1) /* check only once */
+ have_new_cache = check_new_cache();
+
+ if (!have_new_cache) {
+ /*
+ * If we are using the old caching interface: exportfs
+ * uses the rmtab to determine what should be exported,
+ * so it is important that it be up-to-date.
+ *
+ * If we are using the new caching interface: the rmtab
+ * is ignored by exportfs and the fdatasync only serves
+ * to slow us down.
+ */
+ fflush(fp);
+ fdatasync(fileno(fp));
+ }
+
fclose(fp);
}
}