svn commit: r325516 - in head: lib/libc/gen sys/kern
Bartek Rutkowski
robak at FreeBSD.org
Tue Nov 7 15:14:49 UTC 2017
Author: robak (ports committer)
Date: Tue Nov 7 15:13:32 2017
New Revision: 325516
URL: https://svnweb.freebsd.org/changeset/base/325516
Log:
Make sysctl_kern_proc_umask execute fast path when requested pid in
curproc->p_pid or 0, avoiding unnecessary locking. Update libc consumer
to skip calling getpid().
Submitted by: Pawel Biernacki <pawel.biernacki at gmail.com>
Reviewed by: mjg, robak
Approved by: mjg
Sponsored by: Mysterious Code Ltd.
Differential Revision: D12972
Modified:
head/lib/libc/gen/setmode.c
head/sys/kern/kern_proc.c
Modified: head/lib/libc/gen/setmode.c
==============================================================================
--- head/lib/libc/gen/setmode.c Tue Nov 7 15:01:38 2017 (r325515)
+++ head/lib/libc/gen/setmode.c Tue Nov 7 15:13:32 2017 (r325516)
@@ -356,7 +356,7 @@ getumask(void)
* security.bsd.unprivileged_proc_debug is set to 0.
*/
len = sizeof(smask);
- if (sysctl((int[4]){ CTL_KERN, KERN_PROC, KERN_PROC_UMASK, getpid() },
+ if (sysctl((int[4]){ CTL_KERN, KERN_PROC, KERN_PROC_UMASK, 0 },
4, &smask, &len, NULL, 0) == 0)
return (smask);
Modified: head/sys/kern/kern_proc.c
==============================================================================
--- head/sys/kern/kern_proc.c Tue Nov 7 15:01:38 2017 (r325515)
+++ head/sys/kern/kern_proc.c Tue Nov 7 15:13:32 2017 (r325516)
@@ -2770,18 +2770,25 @@ sysctl_kern_proc_umask(SYSCTL_HANDLER_ARGS)
struct proc *p;
int error;
u_short fd_cmask;
+ pid_t pid;
if (namelen != 1)
return (EINVAL);
- error = pget((pid_t)name[0], PGET_WANTREAD, &p);
+ pid = (pid_t)name[0];
+ p = curproc;
+ if (pid == p->p_pid || pid == 0) {
+ fd_cmask = p->p_fd->fd_cmask;
+ goto out;
+ }
+
+ error = pget(pid, PGET_WANTREAD, &p);
if (error != 0)
return (error);
- FILEDESC_SLOCK(p->p_fd);
fd_cmask = p->p_fd->fd_cmask;
- FILEDESC_SUNLOCK(p->p_fd);
PRELE(p);
+out:
error = SYSCTL_OUT(req, &fd_cmask, sizeof(fd_cmask));
return (error);
}
More information about the svn-src-head
mailing list