diff options
author | NeilBrown <neilb@suse.com> | 2016-08-03 14:08:11 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2016-08-03 14:25:10 -0400 |
commit | 2375c47bd7ee1935d5d3ff603f7e346e4ff03088 (patch) | |
tree | 28675c122953dfc08e115dbdfabfec4e02f5f232 | |
parent | 3a6174984dae93827dcbd269eb990f106f0ba2ed (diff) | |
download | nfs-utils-2375c47bd7ee1935d5d3ff603f7e346e4ff03088.tar.gz nfs-utils-2375c47bd7ee1935d5d3ff603f7e346e4ff03088.tar.xz nfs-utils-2375c47bd7ee1935d5d3ff603f7e346e4ff03088.zip |
mountd: allow alternate ttl to be specified for dump_to_cache.
The default will not always be best.
Acked-by: J. Bruce Fields <bfields@fieldses.org>
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r-- | utils/mountd/cache.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index ec86a22..9cc2706 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -881,12 +881,16 @@ static void write_secinfo(char **bp, int *blen, struct exportent *ep, int flag_m } -static int dump_to_cache(int f, char *buf, int buflen, char *domain, char *path, struct exportent *exp) +static int dump_to_cache(int f, char *buf, int buflen, char *domain, + char *path, struct exportent *exp, int ttl) { char *bp = buf; int blen = buflen; time_t now = time(0); + if (ttl <= 1) + ttl = DEFAULT_TTL; + qword_add(&bp, &blen, domain); qword_add(&bp, &blen, path); if (exp) { @@ -913,7 +917,7 @@ static int dump_to_cache(int f, char *buf, int buflen, char *domain, char *path, qword_addhex(&bp, &blen, u, 16); } } else - qword_adduint(&bp, &blen, now + DEFAULT_TTL); + qword_adduint(&bp, &blen, now + ttl); qword_addeol(&bp, &blen); if (blen <= 0) return -1; if (write(f, buf, bp - buf) != bp - buf) return -1; @@ -1273,7 +1277,7 @@ static void lookup_nonexport(int f, char *buf, int buflen, char *dom, char *path struct exportent *eep; eep = lookup_junction(dom, path, ai); - dump_to_cache(f, buf, buflen, dom, path, eep); + dump_to_cache(f, buf, buflen, dom, path, eep, 0); if (eep == NULL) return; exportent_release(eep); @@ -1283,7 +1287,7 @@ static void lookup_nonexport(int f, char *buf, int buflen, char *dom, char *path static void lookup_nonexport(int f, char *buf, int buflen, char *dom, char *path, struct addrinfo *UNUSED(ai)) { - dump_to_cache(f, buf, buflen, dom, path, NULL); + dump_to_cache(f, buf, buflen, dom, path, NULL, 0); } #endif /* !HAVE_NFS_PLUGIN_H */ @@ -1330,11 +1334,11 @@ static void nfsd_export(int f) found = lookup_export(dom, path, ai); if (found) { - if (dump_to_cache(f, buf, sizeof(buf), dom, path, &found->m_export) < 0) { + if (dump_to_cache(f, buf, sizeof(buf), dom, path, &found->m_export, 0) < 0) { xlog(L_WARNING, "Cannot export %s, possibly unsupported filesystem" " or fsid= required", path); - dump_to_cache(f, buf, sizeof(buf), dom, path, NULL); + dump_to_cache(f, buf, sizeof(buf), dom, path, NULL, 0); } } else lookup_nonexport(f, buf, sizeof(buf), dom, path, ai); @@ -1423,7 +1427,7 @@ static int cache_export_ent(char *buf, int buflen, char *domain, struct exporten f = open("/proc/net/rpc/nfsd.export/channel", O_WRONLY); if (f < 0) return -1; - err = dump_to_cache(f, buf, buflen, domain, exp->e_path, exp); + err = dump_to_cache(f, buf, buflen, domain, exp->e_path, exp, 0); if (err) { xlog(L_WARNING, "Cannot export %s, possibly unsupported filesystem or" @@ -1464,7 +1468,7 @@ static int cache_export_ent(char *buf, int buflen, char *domain, struct exporten continue; dev = stb.st_dev; path[l] = 0; - dump_to_cache(f, buf, buflen, domain, path, exp); + dump_to_cache(f, buf, buflen, domain, path, exp, 0); path[l] = c; } break; |