Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Jan 2017 18:59:23 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r311113 - head/sys/kern
Message-ID:  <201701021859.v02IxNmO041503@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



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