Remove magic numbers surrounding locking state in the sysctl module, and

replace them with more meaningful defines.
This commit is contained in:
Bruce M Simpson 2003-10-05 05:38:30 +00:00
parent 45503a37dd
commit 5be99846fc
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=120781
2 changed files with 15 additions and 9 deletions

View file

@ -970,13 +970,13 @@ kernel_sysctl(struct thread *td, int *name, u_int namelen, void *old,
req.oldfunc = sysctl_old_kernel;
req.newfunc = sysctl_new_kernel;
req.lock = 1;
req.lock = REQ_LOCKED;
SYSCTL_LOCK();
error = sysctl_root(0, name, namelen, &req);
if (req.lock == 2)
if (req.lock == REQ_WIRED)
vsunlock(req.oldptr, req.oldlen);
SYSCTL_UNLOCK();
@ -1024,7 +1024,7 @@ sysctl_old_user(struct sysctl_req *req, const void *p, size_t l)
int error = 0;
size_t i = 0;
if (req->lock == 1 && req->oldptr)
if (req->lock == REQ_LOCKED && req->oldptr)
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
"sysctl_old_user()");
if (req->oldptr) {
@ -1071,9 +1071,10 @@ sysctl_new_user(struct sysctl_req *req, void *p, size_t l)
void
sysctl_wire_old_buffer(struct sysctl_req *req, size_t len)
{
if (req->lock == 1 && req->oldptr && req->oldfunc == sysctl_old_user) {
if (req->lock == REQ_LOCKED && req->oldptr &&
req->oldfunc == sysctl_old_user) {
vslock(req->oldptr, req->oldlen);
req->lock = 2;
req->lock = REQ_WIRED;
}
}
@ -1090,7 +1091,7 @@ sysctl_find_oid(int *name, u_int namelen, struct sysctl_oid **noid,
if (oid->oid_number == name[indx]) {
indx++;
if (oid->oid_kind & CTLFLAG_NOLOCK)
req->lock = 0;
req->lock = REQ_UNLOCKED;
if ((oid->oid_kind & CTLTYPE) == CTLTYPE_NODE) {
if (oid->oid_handler != NULL ||
indx == namelen) {
@ -1264,7 +1265,7 @@ userland_sysctl(struct thread *td, int *name, u_int namelen, void *old,
req.oldfunc = sysctl_old_user;
req.newfunc = sysctl_new_user;
req.lock = 1;
req.lock = REQ_LOCKED;
SYSCTL_LOCK();
@ -1283,7 +1284,7 @@ userland_sysctl(struct thread *td, int *name, u_int namelen, void *old,
} while (error == EAGAIN);
req = req2;
if (req.lock == 2)
if (req.lock == REQ_WIRED)
vsunlock(req.oldptr, req.oldlen);
SYSCTL_UNLOCK();

View file

@ -117,13 +117,18 @@ struct ctlname {
#define SYSCTL_HANDLER_ARGS struct sysctl_oid *oidp, void *arg1, int arg2, \
struct sysctl_req *req
/* definitions for sysctl_req 'lock' member */
#define REQ_UNLOCKED 0 /* not locked and not wired */
#define REQ_LOCKED 1 /* locked and not wired */
#define REQ_WIRED 2 /* locked and wired */
/*
* This describes the access space for a sysctl request. This is needed
* so that we can use the interface from the kernel or from user-space.
*/
struct sysctl_req {
struct thread *td; /* used for access checking */
int lock;
int lock; /* locking/wiring state */
void *oldptr;
size_t oldlen;
size_t oldidx;