aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_ktrace.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2016-08-10 15:25:44 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2016-08-10 15:25:44 +0000
commit7c34b35b5725b67833d32336902348a627bebc6b (patch)
tree15e955ba5604c02418d031a16c72b85df20b4e2f /sys/kern/kern_ktrace.c
parent382172be686cf55d308e38daef0bb219fb9abe10 (diff)
downloadsrc-7c34b35b5725b67833d32336902348a627bebc6b.tar.gz
src-7c34b35b5725b67833d32336902348a627bebc6b.zip
ktrace: do a lockless check on fork to see if tracing is enabled
This saves 2 lock acquisitions in the common case.
Notes
Notes: svn path=/head/; revision=303922
Diffstat (limited to 'sys/kern/kern_ktrace.c')
-rw-r--r--sys/kern/kern_ktrace.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index 0e30fc9cd9c8..676cd438420b 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -572,9 +572,14 @@ void
ktrprocfork(struct proc *p1, struct proc *p2)
{
+ MPASS(p2->p_tracevp == NULL);
+ MPASS(p2->p_traceflag == 0);
+
+ if (p1->p_traceflag == 0)
+ return;
+
PROC_LOCK(p1);
mtx_lock(&ktrace_mtx);
- KASSERT(p2->p_tracevp == NULL, ("new process has a ktrace vnode"));
if (p1->p_traceflag & KTRFAC_INHERIT) {
p2->p_traceflag = p1->p_traceflag;
if ((p2->p_tracevp = p1->p_tracevp) != NULL) {