X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Fcacheio.c;h=d7ad4293762f4b6dd583fec668cb0ea9df47b733;hp=ff5b02813e256c12b017da5356d80ecb17b9c43c;hb=7d6fa6e153b26e0e9ad2dfdff3ce2168c46dd16b;hpb=bce6f6871f481087890674497b4b2154dc4825fc diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c index ff5b028..d7ad429 100644 --- a/support/nfs/cacheio.c +++ b/support/nfs/cacheio.c @@ -205,16 +205,17 @@ int readline(int fd, char **buf, int *lenp) */ char *new; int nl; - *lenp += 128; + *lenp *= 2; new = realloc(*buf, *lenp); if (new == NULL) return 0; - nl = read(fd, *buf +len, *lenp - len); - if (nl <= 0 ) + *buf = new; + nl = read(fd, *buf + len, *lenp - len); + if (nl <= 0) return 0; - new += nl; + len += nl; } - (*buf)[len-1] = 0; + (*buf)[len-1] = '\0'; return 1; } @@ -227,7 +228,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 +247,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);