Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Feb 2020 22:26:00 +0000 (UTC)
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r357467 - in head/sys: kern sys
Message-ID:  <202002032226.013MQ0lx081409@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mjg
Date: Mon Feb  3 22:26:00 2020
New Revision: 357467
URL: https://svnweb.freebsd.org/changeset/base/357467

Log:
  ktrace: provide ktrstat_error
  
  This eliminates a branch from its consumers trading it for an extra call
  if ktrace is enabled for curthread. Given that this is almost never true,
  the tradeoff is worth it.

Modified:
  head/sys/kern/kern_descrip.c
  head/sys/kern/kern_ktrace.c
  head/sys/kern/vfs_syscalls.c
  head/sys/sys/ktrace.h

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c	Mon Feb  3 20:48:57 2020	(r357466)
+++ head/sys/kern/kern_descrip.c	Mon Feb  3 22:26:00 2020	(r357467)
@@ -1445,16 +1445,14 @@ kern_fstat(struct thread *td, int fd, struct stat *sbp
 	error = fo_stat(fp, sbp, td->td_ucred, td);
 	fdrop(fp, td);
 #ifdef __STAT_TIME_T_EXT
-	if (error == 0) {
-		sbp->st_atim_ext = 0;
-		sbp->st_mtim_ext = 0;
-		sbp->st_ctim_ext = 0;
-		sbp->st_btim_ext = 0;
-	}
+	sbp->st_atim_ext = 0;
+	sbp->st_mtim_ext = 0;
+	sbp->st_ctim_ext = 0;
+	sbp->st_btim_ext = 0;
 #endif
 #ifdef KTRACE
-	if (error == 0 && KTRPOINT(td, KTR_STRUCT))
-		ktrstat(sbp);
+	if (KTRPOINT(td, KTR_STRUCT))
+		ktrstat_error(sbp, error);
 #endif
 	return (error);
 }

Modified: head/sys/kern/kern_ktrace.c
==============================================================================
--- head/sys/kern/kern_ktrace.c	Mon Feb  3 20:48:57 2020	(r357466)
+++ head/sys/kern/kern_ktrace.c	Mon Feb  3 22:26:00 2020	(r357467)
@@ -779,6 +779,14 @@ ktrstruct(const char *name, const void *data, size_t d
 }
 
 void
+ktrstruct_error(const char *name, const void *data, size_t datalen, int error)
+{
+
+	if (error == 0)
+		ktrstruct(name, data, datalen);
+}
+
+void
 ktrstructarray(const char *name, enum uio_seg seg, const void *data,
     int num_items, size_t struct_size)
 {

Modified: head/sys/kern/vfs_syscalls.c
==============================================================================
--- head/sys/kern/vfs_syscalls.c	Mon Feb  3 20:48:57 2020	(r357466)
+++ head/sys/kern/vfs_syscalls.c	Mon Feb  3 22:26:00 2020	(r357467)
@@ -2349,8 +2349,6 @@ kern_statat(struct thread *td, int flag, int fd, const
 	}
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 	vput(nd.ni_vp);
-	if (error != 0)
-		return (error);
 #ifdef __STAT_TIME_T_EXT
 	sbp->st_atim_ext = 0;
 	sbp->st_mtim_ext = 0;
@@ -2359,9 +2357,9 @@ kern_statat(struct thread *td, int flag, int fd, const
 #endif
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_STRUCT))
-		ktrstat(sbp);
+		ktrstat_error(sbp, error);
 #endif
-	return (0);
+	return (error);
 }
 
 #if defined(COMPAT_FREEBSD11)

Modified: head/sys/sys/ktrace.h
==============================================================================
--- head/sys/sys/ktrace.h	Mon Feb  3 20:48:57 2020	(r357466)
+++ head/sys/sys/ktrace.h	Mon Feb  3 22:26:00 2020	(r357467)
@@ -280,6 +280,7 @@ void	ktrprocexit(struct thread *);
 void	ktrprocfork(struct proc *, struct proc *);
 void	ktruserret(struct thread *);
 void	ktrstruct(const char *, const void *, size_t);
+void	ktrstruct_error(const char *, const void *, size_t, int);
 void	ktrstructarray(const char *, enum uio_seg, const void *, int, size_t);
 void	ktrcapfail(enum ktr_cap_fail_type, const cap_rights_t *,
 	    const cap_rights_t *);
@@ -291,6 +292,8 @@ void	ktrcapfail(enum ktr_cap_fail_type, const cap_righ
 	ktrstruct("sockaddr", (s), ((struct sockaddr *)(s))->sa_len)
 #define ktrstat(s) \
 	ktrstruct("stat", (s), sizeof(struct stat))
+#define ktrstat_error(s, error) \
+	ktrstruct_error("stat", (s), sizeof(struct stat), error)
 extern u_int ktr_geniosize;
 #else
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202002032226.013MQ0lx081409>