Date: Sat, 10 Nov 2018 23:07:46 +0000 (UTC) From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r340339 - in head: lib/libc/net share/man/man5 Message-ID: <201811102307.wAAN7kka037505@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: trasz Date: Sat Nov 10 23:07:46 2018 New Revision: 340339 URL: https://svnweb.freebsd.org/changeset/base/340339 Log: Don't call stat(2) on nsswitch.conf(5) every time nsdispatch(3) and dependent functions (eg getpwname(3)) get called. This can improve performance of binaries that perform a lot of name lookups, such as gssd(8). It also matches documented behaviour of Linux and Solaris. The old code is left in place, should anyone need it, guarded by #ifdef NS_REREAD_CONF. Reviewed by: imp, bcr MFC after: 2 weeks Relnotes: yes Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D17934 Modified: head/lib/libc/net/nsdispatch.c head/share/man/man5/nsswitch.conf.5 Modified: head/lib/libc/net/nsdispatch.c ============================================================================== --- head/lib/libc/net/nsdispatch.c Sat Nov 10 22:14:09 2018 (r340338) +++ head/lib/libc/net/nsdispatch.c Sat Nov 10 23:07:46 2018 (r340339) @@ -335,6 +335,7 @@ static int nss_configure(void) { static time_t confmod; + static int already_initialized = 0; struct stat statbuf; int result, isthreaded; const char *path; @@ -352,6 +353,16 @@ nss_configure(void) if (path == NULL) #endif path = _PATH_NS_CONF; +#ifndef NS_REREAD_CONF + /* + * Define NS_REREAD_CONF to have nsswitch notice changes + * to nsswitch.conf(5) during runtime. This involves calling + * stat(2) every time, which can result in performance hit. + */ + if (already_initialized) + return (0); + already_initialized = 1; +#endif /* NS_REREAD_CONF */ if (stat(path, &statbuf) != 0) return (0); if (statbuf.st_mtime <= confmod) Modified: head/share/man/man5/nsswitch.conf.5 ============================================================================== --- head/share/man/man5/nsswitch.conf.5 Sat Nov 10 22:14:09 2018 (r340338) +++ head/share/man/man5/nsswitch.conf.5 Sat Nov 10 23:07:46 2018 (r340339) @@ -33,7 +33,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 6, 2016 +.Dd November 10, 2018 .Dt NSSWITCH.CONF 5 .Os .Sh NAME @@ -340,6 +340,12 @@ sets a policy of "if the user is notfound in nis, do n This treats nis as the authoritative source of information, except when the server is down. .Sh NOTES +The +.Nm +file is parsed by each program only once. +Subsequent changes will not be applied until the program +is restarted. +.Pp If system got compiled with .Va WITHOUT_NIS you have to remove
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811102307.wAAN7kka037505>