X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=support%2Fnfs%2Fcacheio.c;h=33231b01e1daae34cbff3933224b307978b7be37;hb=2a8ca391fcc5f34aa02aa985a17823f6f7a4ad9f;hp=77facb1eaccc7158dedef07f08db8c0bef448017;hpb=2d33968c66860ad772aac918992986fe4865b3a4;p=nfs-utils.git diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c index 77facb1..33231b0 100644 --- a/support/nfs/cacheio.c +++ b/support/nfs/cacheio.c @@ -227,7 +227,8 @@ int check_new_cache(void) { struct stat stb; - return (stat("/proc/fs/nfs/filehandle", &stb) == 0); + return (stat("/proc/fs/nfs/filehandle", &stb) == 0) || + (stat("/proc/fs/nfsd/filehandle", &stb) == 0); } @@ -245,10 +246,16 @@ cache_flush(int force) int c; char stime[20]; char path[200]; + /* Note: the order of these caches is important. + * The need to be flushed in dependancy order. So + * a cache that references items in another cache, + * as nfsd.fh entries reference items in nfsd.export, + * must be flushed before the cache that it references. + */ static char *cachelist[] = { "auth.unix.ip", - "nfsd.export", "nfsd.fh", + "nfsd.export", NULL }; stb.st_mtime = time(0); @@ -260,7 +267,7 @@ cache_flush(int force) int fd; sprintf(path, "/proc/net/rpc/%s/flush", cachelist[c]); fd = open(path, O_RDWR); - if (fd) { + if (fd >= 0) { write(fd, stime, strlen(stime)); close(fd); }