Date: Mon, 7 Jun 2021 00:40:11 GMT From: Mateusz Guzik <mjg@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 5d745b399d31 - stable/13 - vfs: elide vnode locking when it is only needed for audit if possible Message-ID: <202106070040.1570eBUK062285@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by mjg: URL: https://cgit.FreeBSD.org/src/commit/?id=5d745b399d31c0a48b634e7eae6786ba2675194b commit 5d745b399d31c0a48b634e7eae6786ba2675194b Author: Mateusz Guzik <mjg@FreeBSD.org> AuthorDate: 2021-05-23 19:28:26 +0000 Commit: Mateusz Guzik <mjg@FreeBSD.org> CommitDate: 2021-06-07 00:34:52 +0000 vfs: elide vnode locking when it is only needed for audit if possible (cherry picked from commit a269183875f6d5141c81277d41b552871e2171e5) --- sys/kern/vfs_syscalls.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 26a8d31e4456..c18bb56fc632 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -2802,9 +2802,11 @@ sys_fchflags(struct thread *td, struct fchflags_args *uap) if (error != 0) return (error); #ifdef AUDIT - vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY); - AUDIT_ARG_VNODE1(fp->f_vnode); - VOP_UNLOCK(fp->f_vnode); + if (AUDITING_TD(td)) { + vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY); + AUDIT_ARG_VNODE1(fp->f_vnode); + VOP_UNLOCK(fp->f_vnode); + } #endif error = setfflags(td, fp->f_vnode, uap->flags); fdrop(fp, td); @@ -3303,9 +3305,11 @@ kern_futimes(struct thread *td, int fd, struct timeval *tptr, if (error != 0) return (error); #ifdef AUDIT - vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY); - AUDIT_ARG_VNODE1(fp->f_vnode); - VOP_UNLOCK(fp->f_vnode); + if (AUDITING_TD(td)) { + vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY); + AUDIT_ARG_VNODE1(fp->f_vnode); + VOP_UNLOCK(fp->f_vnode); + } #endif error = setutimes(td, fp->f_vnode, ts, 2, tptr == NULL); fdrop(fp, td); @@ -3337,9 +3341,11 @@ kern_futimens(struct thread *td, int fd, struct timespec *tptr, if (error != 0) return (error); #ifdef AUDIT - vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY); - AUDIT_ARG_VNODE1(fp->f_vnode); - VOP_UNLOCK(fp->f_vnode); + if (AUDITING_TD(td)) { + vn_lock(fp->f_vnode, LK_SHARED | LK_RETRY); + AUDIT_ARG_VNODE1(fp->f_vnode); + VOP_UNLOCK(fp->f_vnode); + } #endif error = setutimes(td, fp->f_vnode, ts, 2, flags & UTIMENS_NULL); fdrop(fp, td);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106070040.1570eBUK062285>