svn commit: r340339 - in head: lib/libc/net share/man/man5
Edward Tomasz Napierala
trasz at FreeBSD.org
Sat Nov 10 23:07:48 UTC 2018
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
More information about the svn-src-all
mailing list