Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Mar 2009 17:00:29 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r189631 - head/sys/kern
Message-ID:  <200903101700.n2AH0T5l068113@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903101700.n2AH0T5l068113>