git: 66b177e1b433 - main - vfs: reduce spurious zeroing in VOP_STAT
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 12 Mar 2022 12:14:32 UTC
The branch main has been updated by mjg:
URL: https://cgit.FreeBSD.org/src/commit/?id=66b177e1b4330f7b26bfb4d73bb4cc6581721cc9
commit 66b177e1b4330f7b26bfb4d73bb4cc6581721cc9
Author: Mateusz Guzik <mjg@FreeBSD.org>
AuthorDate: 2022-03-12 11:49:17 +0000
Commit: Mateusz Guzik <mjg@FreeBSD.org>
CommitDate: 2022-03-12 12:05:37 +0000
vfs: reduce spurious zeroing in VOP_STAT
clang fails to take advantage of the fact that majority of the struct
gets written to in the routine and decides to bzero the entire thing.
Explicitly zero padding and spare fields, relying on KMSAN to catch
problems should anything pop up later which also needs explicit
zeroing.
fstat on tmpfs (ops/s):
before: 8216636
after: 8508033
---
sys/sys/vnode.h | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index f595029bdd14..7bd483d2e17c 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -970,8 +970,11 @@ void vop_rename_fail(struct vop_rename_args *ap);
int _error; \
AUDIT_ARG_VNODE1(ap->a_vp); \
_error = mac_vnode_check_stat(_ap->a_active_cred, _ap->a_file_cred, _ap->a_vp);\
- if (__predict_true(_error == 0)) \
- bzero(_ap->a_sb, sizeof(*_ap->a_sb)); \
+ if (__predict_true(_error == 0)) { \
+ ap->a_sb->st_padding0 = 0; \
+ ap->a_sb->st_padding1 = 0; \
+ bzero(_ap->a_sb->st_spare, sizeof(_ap->a_sb->st_spare)); \
+ } \
_error; \
})