summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2002-09-11 20:46:50 +0000
committerjhb <jhb@FreeBSD.org>2002-09-11 20:46:50 +0000
commite8d44769fd7259fbfa7e52d31ffe8c985f23064a (patch)
treee10878a277f56aeeec378467d87a9712a3c2e5a5 /sys/kern
parentd140d93f989816bc35019c181afe31d4413069f8 (diff)
downloadFreeBSD-src-e8d44769fd7259fbfa7e52d31ffe8c985f23064a.zip
FreeBSD-src-e8d44769fd7259fbfa7e52d31ffe8c985f23064a.tar.gz
Change namei and syscall ktrace events to malloc work buffers before
obtaining a ktr_request structure from the free pool so we can avoid starving other threads of ktr_request structures.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_ktrace.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index 71bdd24..3cf3db9 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -330,18 +330,22 @@ ktrsyscall(code, narg, args)
struct ktr_request *req;
struct ktr_syscall *ktp;
size_t buflen;
+ char *buf = NULL;
+ buflen = sizeof(register_t) * narg;
+ if (buflen > 0) {
+ buf = malloc(buflen, M_KTRACE, M_WAITOK);
+ bcopy(args, buf, buflen);
+ }
req = ktr_getrequest(KTR_SYSCALL);
if (req == NULL)
return;
ktp = &req->ktr_data.ktr_syscall;
ktp->ktr_code = code;
ktp->ktr_narg = narg;
- buflen = sizeof(register_t) * narg;
if (buflen > 0) {
- req->ktr_header.ktr_buffer = malloc(buflen, M_KTRACE, M_WAITOK);
- bcopy(args, req->ktr_header.ktr_buffer, buflen);
req->ktr_header.ktr_len = buflen;
+ req->ktr_header.ktr_buffer = buf;
}
ktr_submitrequest(req);
}
@@ -373,16 +377,19 @@ ktrnamei(path)
{
struct ktr_request *req;
int namelen;
+ char *buf = NULL;
+ namelen = strlen(path);
+ if (namelen > 0) {
+ buf = malloc(namelen, M_KTRACE, M_WAITOK);
+ bcopy(path, buf, namelen);
+ }
req = ktr_getrequest(KTR_NAMEI);
if (req == NULL)
return;
- namelen = strlen(path);
if (namelen > 0) {
req->ktr_header.ktr_len = namelen;
- req->ktr_header.ktr_buffer = malloc(namelen, M_KTRACE,
- M_WAITOK);
- bcopy(path, req->ktr_header.ktr_buffer, namelen);
+ req->ktr_header.ktr_buffer = buf;
}
ktr_submitrequest(req);
}
OpenPOWER on IntegriCloud