svn commit: r311113 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Mon Jan 2 18:59:25 UTC 2017
Author: kib
Date: Mon Jan 2 18:59:23 2017
New Revision: 311113
URL: https://svnweb.freebsd.org/changeset/base/311113
Log:
There is no need to use temporary statfs buffer for fsid obliteration
and prison enforcement. Do it on the caller buffer directly.
Besides eliminating memory copies, this change also removes large
structure from the kernel stack.
Extracted from: ino64 work by gleb
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Modified:
head/sys/kern/vfs_syscalls.c
Modified: head/sys/kern/vfs_syscalls.c
==============================================================================
--- head/sys/kern/vfs_syscalls.c Mon Jan 2 18:58:13 2017 (r311112)
+++ head/sys/kern/vfs_syscalls.c Mon Jan 2 18:59:23 2017 (r311113)
@@ -247,7 +247,7 @@ statfs_scale_blocks(struct statfs *sf, l
static int
kern_do_statfs(struct thread *td, struct mount *mp, struct statfs *buf)
{
- struct statfs *sp, sb;
+ struct statfs *sp;
int error;
if (mp == NULL)
@@ -271,13 +271,11 @@ kern_do_statfs(struct thread *td, struct
error = VFS_STATFS(mp, sp);
if (error != 0)
goto out;
+ *buf = *sp;
if (priv_check(td, PRIV_VFS_GENERATION)) {
- bcopy(sp, &sb, sizeof(sb));
- sb.f_fsid.val[0] = sb.f_fsid.val[1] = 0;
- prison_enforce_statfs(td->td_ucred, mp, &sb);
- sp = &sb;
+ buf->f_fsid.val[0] = buf->f_fsid.val[1] = 0;
+ prison_enforce_statfs(td->td_ucred, mp, buf);
}
- *buf = *sp;
out:
vfs_unbusy(mp);
return (error);
More information about the svn-src-head
mailing list