svn commit: r280308 - head/sys/fs/devfs

Xin LI delphij at FreeBSD.org
Sat Mar 21 01:14:13 UTC 2015


Author: delphij
Date: Sat Mar 21 01:14:11 2015
New Revision: 280308
URL: https://svnweb.freebsd.org/changeset/base/280308

Log:
  Disable timestamping on devfs read/write operations by default.
  
  Currently we update timestamps unconditionally when doing read or
  write operations.  This may slow things down on hardware where
  reading timestamps is expensive (e.g. HPET, because of the default
  vfs.timestamp_precision setting is nanosecond now) with limited
  benefit.
  
  A new sysctl variable, vfs.devfs.dotimes is added, which can be
  set to non-zero value when the old behavior is desirable.
  
  Differential Revision:	https://reviews.freebsd.org/D2104
  Reported by:	Mike Tancsa <mike sentex net>
  Reviewed by:	kib
  Relnotes:	yes
  Sponsored by:	iXsystems, Inc.
  MFC after:	2 weeks

Modified:
  head/sys/fs/devfs/devfs_devs.c
  head/sys/fs/devfs/devfs_vnops.c

Modified: head/sys/fs/devfs/devfs_devs.c
==============================================================================
--- head/sys/fs/devfs/devfs_devs.c	Sat Mar 21 00:21:30 2015	(r280307)
+++ head/sys/fs/devfs/devfs_devs.c	Sat Mar 21 01:14:11 2015	(r280308)
@@ -61,7 +61,7 @@ static MALLOC_DEFINE(M_DEVFS2, "DEVFS2",
 static MALLOC_DEFINE(M_DEVFS3, "DEVFS3", "DEVFS data 3");
 static MALLOC_DEFINE(M_CDEVP, "DEVFS1", "DEVFS cdev_priv storage");
 
-static SYSCTL_NODE(_vfs, OID_AUTO, devfs, CTLFLAG_RW, 0, "DEVFS filesystem");
+SYSCTL_NODE(_vfs, OID_AUTO, devfs, CTLFLAG_RW, 0, "DEVFS filesystem");
 
 static unsigned devfs_generation;
 SYSCTL_UINT(_vfs_devfs, OID_AUTO, generation, CTLFLAG_RD,

Modified: head/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- head/sys/fs/devfs/devfs_vnops.c	Sat Mar 21 00:21:30 2015	(r280307)
+++ head/sys/fs/devfs/devfs_vnops.c	Sat Mar 21 01:14:11 2015	(r280308)
@@ -57,6 +57,7 @@
 #include <sys/proc.h>
 #include <sys/stat.h>
 #include <sys/sx.h>
+#include <sys/sysctl.h>
 #include <sys/time.h>
 #include <sys/ttycom.h>
 #include <sys/unistd.h>
@@ -79,6 +80,12 @@ SX_SYSINIT(clone_drain_lock, &clone_drai
 struct mtx	cdevpriv_mtx;
 MTX_SYSINIT(cdevpriv_mtx, &cdevpriv_mtx, "cdevpriv lock", MTX_DEF);
 
+SYSCTL_DECL(_vfs_devfs);
+
+static int devfs_dotimes;
+SYSCTL_INT(_vfs_devfs, OID_AUTO, dotimes, CTLFLAG_RW,
+        &devfs_dotimes, 0, "Update timestamps on DEVFS");
+
 static int
 devfs_fp_check(struct file *fp, struct cdev **devp, struct cdevsw **dswp,
     int *ref)
@@ -1221,7 +1228,8 @@ devfs_read_f(struct file *fp, struct uio
 
 	foffset_lock_uio(fp, uio, flags | FOF_NOLOCK);
 	error = dsw->d_read(dev, uio, ioflag);
-	if (uio->uio_resid != resid || (error == 0 && resid != 0))
+	if (devfs_dotimes &&
+	    (uio->uio_resid != resid || (error == 0 && resid != 0)))
 		vfs_timestamp(&dev->si_atime);
 	td->td_fpop = fpop;
 	dev_relthread(dev, ref);
@@ -1700,7 +1708,8 @@ devfs_write_f(struct file *fp, struct ui
 	resid = uio->uio_resid;
 
 	error = dsw->d_write(dev, uio, ioflag);
-	if (uio->uio_resid != resid || (error == 0 && resid != 0)) {
+	if (devfs_dotimes &&
+	    (uio->uio_resid != resid || (error == 0 && resid != 0))) {
 		vfs_timestamp(&dev->si_ctime);
 		dev->si_mtime = dev->si_ctime;
 	}


More information about the svn-src-head mailing list