svn commit: r189631 - head/sys/kern

John Baldwin jhb at FreeBSD.org
Tue Mar 10 10:00:30 PDT 2009


Author: jhb
Date: Tue Mar 10 17:00:28 2009
New Revision: 189631
URL: http://svn.freebsd.org/changeset/base/189631

Log:
  - Remove a recently added comment from kernel_sysctlbyname() that isn't
    needed.
  - Move the release of the sysctl sx lock after the vsunlock() in
    userland_sysctl() to restore the original memlock behavior of
    minimizing the amount of memory wired to handle sysctl requests.
  
  MFC after:	1 week

Modified:
  head/sys/kern/kern_sysctl.c

Modified: head/sys/kern/kern_sysctl.c
==============================================================================
--- head/sys/kern/kern_sysctl.c	Tue Mar 10 16:42:49 2009	(r189630)
+++ head/sys/kern/kern_sysctl.c	Tue Mar 10 17:00:28 2009	(r189631)
@@ -1200,14 +1200,6 @@ kernel_sysctlbyname(struct thread *td, c
 	oid[1] = 3;		/* name2oid */
 	oidlen = sizeof(oid);
 
-	/*
-	 * XXX: Prone to a possible race condition between lookup and
-	 * execution? Maybe put locking around it?
-	 *
-	 * Userland is just as racy, so I think the current implementation
-	 * is fine.
-	 */
-
 	error = kernel_sysctl(td, oid, 2, oid, &oidlen,
 	    (void *)name, strlen(name), &plen, flags);
 	if (error)
@@ -1520,10 +1512,10 @@ userland_sysctl(struct thread *td, int *
 	}
 
 	CURVNET_RESTORE();
-	SYSCTL_XUNLOCK();
 
 	if (req.lock == REQ_WIRED && req.validlen > 0)
 		vsunlock(req.oldptr, req.validlen);
+	SYSCTL_XUNLOCK();
 
 	if (error && error != ENOMEM)
 		return (error);


More information about the svn-src-all mailing list