Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP5:Update
nfs-utils.19253
0185-mountd-make-default-ttl-settable-by-option...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0185-mountd-make-default-ttl-settable-by-option.patch of Package nfs-utils.19253
From b72d3fc34ad0d7fa79edb89f8b8cbe5e30ffc80c Mon Sep 17 00:00:00 2001 From: NeilBrown <neil@brown.name> Date: Fri, 19 Feb 2021 12:09:05 +1100 Subject: [PATCH] mountd: make default ttl settable by option The DEFAULT_TTL affects the rate at which authentication messages are logged. So it is useful to make it settable. Add "-ttl" and "-T", and add clear statement in the documentation of both the benefits and the possible negative effects of choosing a larger value Signed-off-by: NeilBrown <neil@brown.name> --- support/include/exportfs.h | 3 ++- support/nfs/exports.c | 4 +++- utils/mountd/cache.c | 6 +++--- utils/mountd/mountd.c | 14 +++++++++++++- utils/mountd/mountd.man | 18 +++++++++++++++--- utils/mountd/v4root.c | 3 ++- 6 files changed, 38 insertions(+), 10 deletions(-) --- a/support/include/exportfs.h +++ b/support/include/exportfs.h @@ -104,7 +104,8 @@ typedef struct mexport { } nfs_export; #define HASH_TABLE_SIZE 1021 -#define DEFAULT_TTL (30 * 60) + +extern int default_ttl; typedef struct _exp_hash_entry { nfs_export * p_first; --- a/support/nfs/exports.c +++ b/support/nfs/exports.c @@ -47,6 +47,8 @@ struct flav_info flav_map[] = { const int flav_map_size = sizeof(flav_map)/sizeof(flav_map[0]); +int default_ttl = 30 * 60; + static char *efname = NULL; static XFILE *efp = NULL; static int first; @@ -100,7 +102,7 @@ static void init_exportent (struct expor ee->e_nsquids = 0; ee->e_nsqgids = 0; ee->e_uuid = NULL; - ee->e_ttl = DEFAULT_TTL; + ee->e_ttl = default_ttl; } struct exportent * --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -120,7 +120,7 @@ static void auth_unix_ip(FILE *f) qword_print(f, "nfsd"); qword_print(f, ipaddr); - qword_printtimefrom(f, DEFAULT_TTL); + qword_printtimefrom(f, default_ttl); if (use_ipaddr && client) { memmove(ipaddr + 1, ipaddr, strlen(ipaddr) + 1); ipaddr[0] = '$'; @@ -186,7 +186,7 @@ static void auth_unix_gid(FILE *f) } } qword_printuint(f, uid); - qword_printtimefrom(f, DEFAULT_TTL); + qword_printtimefrom(f, default_ttl); if (rv >= 0) { qword_printuint(f, ngroups); for (i=0; i<ngroups; i++) @@ -818,7 +818,7 @@ static int dump_to_cache(FILE *f, char * xlog(D_AUTH, "granted access to %s for %s", path, *domain == '$' ? domain+1 : domain); } else { - qword_printtimefrom(f, DEFAULT_TTL); + qword_printtimefrom(f, default_ttl); xlog(D_AUTH, "denied access to %s for %s", path, *domain == '$' ? domain+1 : domain); } --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -71,9 +71,10 @@ static struct option longopts[] = { "no-udp", 0, 0, 'u' }, { "log-auth", 0, 0, 'l'}, { "cache-use-ipaddr", 0, 0, 'i'}, + { "ttl", 1, 0, 'T'}, { NULL, 0, 0, 0 } }; -static char shortopts[] = "o:nFd:f:p:P:hH:N:V:vurs:t:gli"; +static char shortopts[] = "o:nFd:f:p:P:hH:N:V:vurs:t:gliT:"; #define NFSVERSBIT(vers) (0x1 << (vers - 1)) #define NFSVERSBIT_ALL (NFSVERSBIT(2) | NFSVERSBIT(3) | NFSVERSBIT(4)) @@ -701,6 +702,7 @@ main(int argc, char **argv) int descriptors = 0; int c; int vers; + int ttl; struct sigaction sa; struct rlimit rlim; @@ -795,6 +797,15 @@ main(int argc, char **argv) case 'i': use_ipaddr = 2; break; + case 'T': + ttl = atoi(optarg); + if (ttl <= 0) { + fprintf(stderr, "%s: bad ttl number of seconds: %s\n", + argv[0], optarg); + usage(argv[0], 1); + } + default_ttl = ttl; + break; case 0: break; case '?': @@ -917,6 +928,7 @@ usage(const char *prog, int n) { fprintf(stderr, "Usage: %s [-F|--foreground] [-h|--help] [-v|--version] [-d kind|--debug kind]\n" +" [-l|--log-auth] [-i|--cache-use-ipaddr] [-T|--ttl ttl]\n" " [-o num|--descriptors num] [-f exports-file|--exports-file=file]\n" " [-p|--port port] [-V version|--nfs-version version]\n" " [-N version|--no-nfs-version version] [-n|--no-tcp]\n" --- a/utils/mountd/mountd.man +++ b/utils/mountd/mountd.man @@ -99,9 +99,10 @@ Turn on debugging. Valid kinds are: all, .TP .BR \-l " or " \-\-log\-auth Enable logging of responses to authentication and access requests from -nfsd. Each response is then cached by the kernel for 30 minutes, and -will be refreshed after 15 minutes if the relevant client remains -active. +nfsd. Each response is then cached by the kernel for 30 minutes (or as set by +.B \-\-ttl +below), and will be refreshed after 15 minutes (half the ttl time) if +the relevant client remains active. Note that .B -l is equivalent to @@ -135,6 +136,17 @@ log messages produced by the .B -l option easier to read. .TP +.B \-T " or " \-\-ttl +Provide a time-to-live (TTL) for cached information given to the kernel. +The kernel will normally request an update if the information is needed +after half of this time has expired. Increasing the provided number, +which is in seconds, reduces the rate of cache update requests, and this +is particularly noticeable when these requests are logged with +.BR \-l . +However increasing also means that changes to hostname to address +mappings can take longer to be noticed. +The default TTL is 1800 (30 minutes). +.TP .B \-F " or " \-\-foreground Run in foreground (do not daemonize) .TP --- a/utils/mountd/v4root.c +++ b/utils/mountd/v4root.c @@ -46,7 +46,7 @@ static nfs_export pseudo_root = { .e_nsqgids = 0, .e_fsid = 0, .e_mountpoint = NULL, - .e_ttl = DEFAULT_TTL, + .e_ttl = 0, }, .m_exported = 0, .m_xtabent = 1, @@ -87,6 +87,7 @@ v4root_create(char *path, nfs_export *ex struct exportent *curexp = &export->m_export; dupexportent(&eep, &pseudo_root.m_export); + eep.e_ttl = default_ttl; eep.e_hostname = curexp->e_hostname; strncpy(eep.e_path, path, sizeof(eep.e_path)); if (strcmp(path, "/") != 0)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor