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-all
mailing list