mirror of
https://github.com/opnsense/src.git
synced 2026-02-24 10:20:24 -05:00
proc: Relax proc_rwmem()'s assertion on the process hold count
This reference ensures that the process and its associated vmspace will not be destroyed while proc_rwmem() is executing. If, however, the calling thread belongs to the target process, then it is unnecessary to hold the process. In particular, fasttrap - a module which enables userspace dtrace - may frequently call proc_rwmem(), and we'd prefer to avoid the overhead of locking and bumping the hold count when possible. Thus, make the assertion conditional on "p != curproc". Also assert that the process is not already exiting. No functional change intended. MFC after: 2 weeks Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
f27fb06cad
commit
12fb39ec3e
1 changed files with 5 additions and 4 deletions
|
|
@ -336,11 +336,12 @@ proc_rwmem(struct proc *p, struct uio *uio)
|
|||
int error, fault_flags, page_offset, writing;
|
||||
|
||||
/*
|
||||
* Assert that someone has locked this vmspace. (Should be
|
||||
* curthread but we can't assert that.) This keeps the process
|
||||
* from exiting out from under us until this operation completes.
|
||||
* Make sure that the process' vmspace remains live.
|
||||
*/
|
||||
PROC_ASSERT_HELD(p);
|
||||
if (p != curproc)
|
||||
PROC_ASSERT_HELD(p);
|
||||
KASSERT((p->p_flag & P_WEXIT) == 0,
|
||||
("%s: process %p is exiting", __func__, p));
|
||||
PROC_LOCK_ASSERT(p, MA_NOTOWNED);
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue