Deleted Added
full compact
kern_sysctl.c (217616) kern_sysctl.c (217915)
1/*-
2 * Copyright (c) 1982, 1986, 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Mike Karels at Berkeley Software Design, Inc.
7 *
8 * Quite extensively rewritten by Poul-Henning Kamp of the FreeBSD

--- 22 unchanged lines hidden (view full) ---

31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
36 */
37
38#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1982, 1986, 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Mike Karels at Berkeley Software Design, Inc.
7 *
8 * Quite extensively rewritten by Poul-Henning Kamp of the FreeBSD

--- 22 unchanged lines hidden (view full) ---

31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
36 */
37
38#include <sys/cdefs.h>
39__FBSDID("$FreeBSD: head/sys/kern/kern_sysctl.c 217616 2011-01-19 23:00:25Z mdf $");
39__FBSDID("$FreeBSD: head/sys/kern/kern_sysctl.c 217915 2011-01-26 22:48:09Z mdf $");
40
41#include "opt_compat.h"
42#include "opt_ktrace.h"
43
44#include <sys/param.h>
45#include <sys/fail.h>
46#include <sys/systm.h>
47#include <sys/kernel.h>

--- 1153 unchanged lines hidden (view full) ---

1201
1202 if (new != NULL) {
1203 req.newlen = newlen;
1204 req.newptr = new;
1205 }
1206
1207 req.oldfunc = sysctl_old_kernel;
1208 req.newfunc = sysctl_new_kernel;
40
41#include "opt_compat.h"
42#include "opt_ktrace.h"
43
44#include <sys/param.h>
45#include <sys/fail.h>
46#include <sys/systm.h>
47#include <sys/kernel.h>

--- 1153 unchanged lines hidden (view full) ---

1201
1202 if (new != NULL) {
1203 req.newlen = newlen;
1204 req.newptr = new;
1205 }
1206
1207 req.oldfunc = sysctl_old_kernel;
1208 req.newfunc = sysctl_new_kernel;
1209 req.lock = REQ_LOCKED;
1209 req.lock = REQ_UNWIRED;
1210
1211 SYSCTL_XLOCK();
1212 error = sysctl_root(0, name, namelen, &req);
1213 SYSCTL_XUNLOCK();
1214
1215 if (req.lock == REQ_WIRED && req.validlen > 0)
1216 vsunlock(req.oldptr, req.validlen);
1217

--- 91 unchanged lines hidden (view full) ---

1309int
1310sysctl_wire_old_buffer(struct sysctl_req *req, size_t len)
1311{
1312 int ret;
1313 size_t wiredlen;
1314
1315 wiredlen = (len > 0 && len < req->oldlen) ? len : req->oldlen;
1316 ret = 0;
1210
1211 SYSCTL_XLOCK();
1212 error = sysctl_root(0, name, namelen, &req);
1213 SYSCTL_XUNLOCK();
1214
1215 if (req.lock == REQ_WIRED && req.validlen > 0)
1216 vsunlock(req.oldptr, req.validlen);
1217

--- 91 unchanged lines hidden (view full) ---

1309int
1310sysctl_wire_old_buffer(struct sysctl_req *req, size_t len)
1311{
1312 int ret;
1313 size_t wiredlen;
1314
1315 wiredlen = (len > 0 && len < req->oldlen) ? len : req->oldlen;
1316 ret = 0;
1317 if (req->lock == REQ_LOCKED && req->oldptr &&
1317 if (req->lock != REQ_WIRED && req->oldptr &&
1318 req->oldfunc == sysctl_old_user) {
1319 if (wiredlen != 0) {
1320 ret = vslock(req->oldptr, wiredlen);
1321 if (ret != 0) {
1322 if (ret != ENOMEM)
1323 return (ret);
1324 wiredlen = 0;
1325 }

--- 19 unchanged lines hidden (view full) ---

1345 SLIST_FOREACH(oid, lsp, oid_link) {
1346 if (oid->oid_number == name[indx])
1347 break;
1348 }
1349 if (oid == NULL)
1350 return (ENOENT);
1351
1352 indx++;
1318 req->oldfunc == sysctl_old_user) {
1319 if (wiredlen != 0) {
1320 ret = vslock(req->oldptr, wiredlen);
1321 if (ret != 0) {
1322 if (ret != ENOMEM)
1323 return (ret);
1324 wiredlen = 0;
1325 }

--- 19 unchanged lines hidden (view full) ---

1345 SLIST_FOREACH(oid, lsp, oid_link) {
1346 if (oid->oid_number == name[indx])
1347 break;
1348 }
1349 if (oid == NULL)
1350 return (ENOENT);
1351
1352 indx++;
1353 if (oid->oid_kind & CTLFLAG_NOLOCK)
1354 req->lock = REQ_UNLOCKED;
1355 if ((oid->oid_kind & CTLTYPE) == CTLTYPE_NODE) {
1356 if (oid->oid_handler != NULL || indx == namelen) {
1357 *noid = oid;
1358 if (nindx != NULL)
1359 *nindx = indx;
1360 KASSERT((oid->oid_kind & CTLFLAG_DYING) == 0,
1361 ("%s found DYING node %p", __func__, oid));
1362 return (0);

--- 180 unchanged lines hidden (view full) ---

1543 if (!useracc(new, newlen, VM_PROT_READ))
1544 return (EFAULT);
1545 req.newlen = newlen;
1546 req.newptr = new;
1547 }
1548
1549 req.oldfunc = sysctl_old_user;
1550 req.newfunc = sysctl_new_user;
1353 if ((oid->oid_kind & CTLTYPE) == CTLTYPE_NODE) {
1354 if (oid->oid_handler != NULL || indx == namelen) {
1355 *noid = oid;
1356 if (nindx != NULL)
1357 *nindx = indx;
1358 KASSERT((oid->oid_kind & CTLFLAG_DYING) == 0,
1359 ("%s found DYING node %p", __func__, oid));
1360 return (0);

--- 180 unchanged lines hidden (view full) ---

1541 if (!useracc(new, newlen, VM_PROT_READ))
1542 return (EFAULT);
1543 req.newlen = newlen;
1544 req.newptr = new;
1545 }
1546
1547 req.oldfunc = sysctl_old_user;
1548 req.newfunc = sysctl_new_user;
1551 req.lock = REQ_LOCKED;
1549 req.lock = REQ_UNWIRED;
1552
1553#ifdef KTRACE
1554 if (KTRPOINT(curthread, KTR_SYSCTL))
1555 ktrsysctl(name, namelen);
1556#endif
1557
1558 if (req.oldlen > PAGE_SIZE) {
1559 memlocked = 1;

--- 61 unchanged lines hidden ---
1550
1551#ifdef KTRACE
1552 if (KTRPOINT(curthread, KTR_SYSCTL))
1553 ktrsysctl(name, namelen);
1554#endif
1555
1556 if (req.oldlen > PAGE_SIZE) {
1557 memlocked = 1;

--- 61 unchanged lines hidden ---