VFS accounting: optimize vop_write() performance
authorFrançois Tigeot <ftigeot@wolfpond.org>
Sat, 18 Feb 2012 09:36:06 +0000 (10:36 +0100)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Sat, 18 Feb 2012 10:06:57 +0000 (11:06 +0100)
* Avoid a mount list scan if accounting is globally disabled

sys/kern/vfs_quota.c
sys/kern/vfs_vopops.c
sys/sys/vfs_quota.h

index 339bd7a..f1af1f3 100644 (file)
@@ -109,7 +109,7 @@ gnode_insert(struct mount *mp, gid_t gid)
        return gnp;
 }
 
-static int vfs_accounting_enabled = 0; /* global vfs accounting enable */
+int vfs_accounting_enabled = 0;        /* global vfs accounting enable */
 TUNABLE_INT("vfs.accounting_enabled", &vfs_accounting_enabled);
 SYSCTL_INT(_vfs, OID_AUTO, accounting_enabled, CTLFLAG_RD,
                  &vfs_accounting_enabled, 0, "Enable VFS accounting");
index dd156ca..b544b79 100644 (file)
@@ -63,6 +63,7 @@
 #include <sys/vnode.h>
 #include <sys/vfsops.h>
 #include <sys/sysmsg.h>
+#include <sys/vfs_quota.h>
 
 #include <machine/limits.h>
 
@@ -427,7 +428,7 @@ vop_write(struct vop_ops *ops, struct vnode *vp, struct uio *uio, int ioflag,
        ap.a_cred = cred;
 
        /* is this a regular vnode ? */
-       if (vp->v_type == VREG) {
+       if ((vp->v_type == VREG) && vfs_accounting_enabled) {
                do_accounting = 1;
                if ((error = VOP_GETATTR(vp, &va)) != 0)
                        return (error);
index dda49e9..5802270 100644 (file)
@@ -41,5 +41,7 @@ extern void vq_done(struct mount*);
 
 int vquotactl(const char *path, struct plistref *pref);
 
+extern int vfs_accounting_enabled;
+
 #endif