summaryrefslogtreecommitdiffstats
path: root/support/nfs/cacheio.c
diff options
context:
space:
mode:
authorneilbrown <neilbrown>2003-05-21 06:44:50 +0000
committerneilbrown <neilbrown>2003-05-21 06:44:50 +0000
commit2d33968c66860ad772aac918992986fe4865b3a4 (patch)
tree63ee30068747c3c2803b972fcd46eeb8d9d88d8b /support/nfs/cacheio.c
parent1275be70ca6cd6c4bec07a3381f7b510086c5526 (diff)
downloadnfs-utils-2d33968c66860ad772aac918992986fe4865b3a4.tar.gz
nfs-utils-2d33968c66860ad772aac918992986fe4865b3a4.tar.xz
nfs-utils-2d33968c66860ad772aac918992986fe4865b3a4.zip
enhance exportfs to use new cache/upcall stuff
Diffstat (limited to 'support/nfs/cacheio.c')
-rw-r--r--support/nfs/cacheio.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
index 2af4fa3..77facb1 100644
--- a/support/nfs/cacheio.c
+++ b/support/nfs/cacheio.c
@@ -230,3 +230,39 @@ check_new_cache(void)
return (stat("/proc/fs/nfs/filehandle", &stb) == 0);
}
+
+/* flush the kNFSd caches.
+ * Set the flush time to the mtime of _PATH_ETAB or
+ * if force, to now.
+ * the caches to flush are:
+ * auth.unix.ip nfsd.export nfsd.fh
+ */
+
+void
+cache_flush(int force)
+{
+ struct stat stb;
+ int c;
+ char stime[20];
+ char path[200];
+ static char *cachelist[] = {
+ "auth.unix.ip",
+ "nfsd.export",
+ "nfsd.fh",
+ NULL
+ };
+ stb.st_mtime = time(0);
+ if (!force)
+ stat(_PATH_ETAB, &stb);
+
+ sprintf(stime, "%ld\n", stb.st_mtime);
+ for (c=0; cachelist[c]; c++) {
+ int fd;
+ sprintf(path, "/proc/net/rpc/%s/flush", cachelist[c]);
+ fd = open(path, O_RDWR);
+ if (fd) {
+ write(fd, stime, strlen(stime));
+ close(fd);
+ }
+ }
+}