mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-19 06:44:31 +00:00
Remove magic numbers surrounding locking state in the sysctl module, and
replace them with more meaningful defines.
This commit is contained in:
parent
45503a37dd
commit
5be99846fc
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=120781
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue