VFS accounting: avoid VOP_GETATTR() calls
authorFrançois Tigeot <ftigeot@wolfpond.org>
Fri, 30 Mar 2012 21:09:51 +0000 (23:09 +0200)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Sat, 31 Mar 2012 05:39:45 +0000 (07:39 +0200)
* Only use them if VFS accounting is not disabled

sys/kern/vfs_syscalls.c

index c378f48..32358bd 100644 (file)
@@ -3404,9 +3404,9 @@ kern_truncate(struct nlookupdata *nd, off_t length)
        struct vnode *vp;
        struct vattr vattr;
        int error;
-       uid_t uid;
-       gid_t gid;
-       uint64_t old_size;
+       uid_t uid = 0;
+       gid_t gid = 0;
+       uint64_t old_size = 0;
 
        if (length < 0)
                return(EINVAL);
@@ -3425,11 +3425,13 @@ kern_truncate(struct nlookupdata *nd, off_t length)
                error = EISDIR;
                goto done;
        }
-       error = VOP_GETATTR(vp, &vattr);
-       KASSERT(error == 0, ("kern_truncate(): VOP_GETATTR didn't return 0"));
-       uid = vattr.va_uid;
-       gid = vattr.va_gid;
-       old_size = vattr.va_size;
+       if (vfs_accounting_enabled) {
+               error = VOP_GETATTR(vp, &vattr);
+               KASSERT(error == 0, ("kern_truncate(): VOP_GETATTR didn't return 0"));
+               uid = vattr.va_uid;
+               gid = vattr.va_gid;
+               old_size = vattr.va_size;
+       }
 
        if ((error = vn_writechk(vp, &nd->nl_nch)) == 0) {
                VATTR_NULL(&vattr);
@@ -3469,9 +3471,9 @@ kern_ftruncate(int fd, off_t length)
        struct vnode *vp;
        struct file *fp;
        int error;
-       uid_t uid;
-       gid_t gid;
-       uint64_t old_size;
+       uid_t uid = 0;
+       gid_t gid = 0;
+       uint64_t old_size = 0;
        struct mount *mp;
 
        if (length < 0)
@@ -3498,11 +3500,13 @@ kern_ftruncate(int fd, off_t length)
                goto done;
        }
 
-       error = VOP_GETATTR(vp, &vattr);
-       KASSERT(error == 0, ("kern_ftruncate(): VOP_GETATTR didn't return 0"));
-       uid = vattr.va_uid;
-       gid = vattr.va_gid;
-       old_size = vattr.va_size;
+       if (vfs_accounting_enabled) {
+               error = VOP_GETATTR(vp, &vattr);
+               KASSERT(error == 0, ("kern_ftruncate(): VOP_GETATTR didn't return 0"));
+               uid = vattr.va_uid;
+               gid = vattr.va_gid;
+               old_size = vattr.va_size;
+       }
 
        if ((error = vn_writechk(vp, NULL)) == 0) {
                VATTR_NULL(&vattr);