Page MenuHomeFreeBSD

D35851.diff
No OneTemporary

D35851.diff

Index: sys/kern/kern_ktrace.c
===================================================================
--- sys/kern/kern_ktrace.c
+++ sys/kern/kern_ktrace.c
@@ -321,13 +321,19 @@
req->ktr_header.ktr_type |= KTR_DROP;
p->p_traceflag &= ~KTRFAC_DROP;
}
- mtx_unlock(&ktrace_mtx);
- nanotime(&req->ktr_header.ktr_time);
- req->ktr_header.ktr_type |= KTR_VERSIONED;
+ if ((p->p_traceflag & KTRFAC_VERSIONED) != 0) {
+ mtx_unlock(&ktrace_mtx);
+ nanotime(&req->ktr_header.ktr_time);
+ req->ktr_header.ktr_type |= KTR_VERSIONED;
+ req->ktr_header.ktr_version = KTR_VERSION1;
+ req->ktr_header.ktr_cpu = PCPU_GET(cpuid);
+ } else {
+ mtx_unlock(&ktrace_mtx);
+ microtime((struct timeval *)&req->ktr_header.ktr_time);
+ req->ktr_header.ktr_version = KTR_VERSION0;
+ }
req->ktr_header.ktr_pid = p->p_pid;
req->ktr_header.ktr_tid = td->td_tid;
- req->ktr_header.ktr_cpu = PCPU_GET(cpuid);
- req->ktr_header.ktr_version = KTR_VERSION1;
bcopy(td->td_name, req->ktr_header.ktr_comm,
sizeof(req->ktr_header.ktr_comm));
req->ktr_buffer = NULL;
@@ -1214,6 +1220,8 @@
p->p_traceflag |= facs;
if (priv_check(td, PRIV_KTRACE) == 0)
p->p_traceflag |= KTRFAC_ROOT;
+ if (p->p_osrel > P_OSREL_KTRACE_VERSIONED)
+ p->p_traceflag |= KTRFAC_VERSIONED;
} else {
/* KTROP_CLEAR */
if (((p->p_traceflag &= ~facs) & KTRFAC_MASK) == 0)
@@ -1274,6 +1282,7 @@
struct iovec aiov[3];
struct mount *mp;
off_t lim;
+ ssize_t kthsz;
int datalen, buflen;
int error;
@@ -1304,6 +1313,10 @@
mtx_unlock(&ktrace_mtx);
kth = &req->ktr_header;
+ if (kth->ktr_version == KTR_VERSION0)
+ kthsz = sizeof(struct ktr_header_v0);
+ else
+ kthsz = sizeof(struct ktr_header);
KASSERT(((u_short)kth->ktr_type & ~KTR_TYPE) < nitems(data_lengths),
("data_lengths array overflow"));
datalen = data_lengths[(u_short)kth->ktr_type & ~KTR_TYPE];
@@ -1313,8 +1326,8 @@
auio.uio_segflg = UIO_SYSSPACE;
auio.uio_rw = UIO_WRITE;
aiov[0].iov_base = (caddr_t)kth;
- aiov[0].iov_len = sizeof(struct ktr_header);
- auio.uio_resid = sizeof(struct ktr_header);
+ aiov[0].iov_len = kthsz;
+ auio.uio_resid = kthsz;
auio.uio_iovcnt = 1;
auio.uio_td = td;
if (datalen != 0) {
Index: sys/sys/ktrace.h
===================================================================
--- sys/sys/ktrace.h
+++ sys/sys/ktrace.h
@@ -285,6 +285,10 @@
#define KTRFAC_ROOT 0x80000000 /* root set this trace */
#define KTRFAC_INHERIT 0x40000000 /* pass trace flags to children */
#define KTRFAC_DROP 0x20000000 /* last event was dropped */
+/*
+ * Generate versioned trace file, deorbit after stable/13 EOL
+ */
+#define KTRFAC_VERSIONED 0x10000000
#ifdef _KERNEL
struct ktr_io_params;
Index: sys/sys/param.h
===================================================================
--- sys/sys/param.h
+++ sys/sys/param.h
@@ -107,6 +107,7 @@
#define P_OSREL_CK_SUPERBLOCK 1300000
#define P_OSREL_CK_INODE 1300005
#define P_OSREL_POWERPC_NEW_AUX_ARGS 1300070
+#define P_OSREL_KTRACE_VERSIONED 1400064
#define P_OSREL_MAJOR(x) ((x) / 100000)
#endif

File Metadata

Mime Type
text/plain
Expires
Tue, Feb 17, 5:12 AM (5 h, 54 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28802414
Default Alt Text
D35851.diff (3 KB)

Event Timeline