git: 706f15c5fa6b - main - Remove witness directives from crossmp locking VOPs

From: Jason A. Harmening <jah_at_FreeBSD.org>
Date: Thu, 27 Oct 2022 00:24:30 UTC
The branch main has been updated by jah:

URL: https://cgit.FreeBSD.org/src/commit/?id=706f15c5fa6b4b9e6845b8d65a3acf23a79b115e

commit 706f15c5fa6b4b9e6845b8d65a3acf23a79b115e
Author:     Jason A. Harmening <jah@FreeBSD.org>
AuthorDate: 2022-08-05 05:39:04 +0000
Commit:     Jason A. Harmening <jah@FreeBSD.org>
CommitDate: 2022-10-27 00:33:18 +0000

    Remove witness directives from crossmp locking VOPs
    
    These are of limited use since the crossmp vnode locking ops have not
    actually used a lock since commit
    a2d35545429117e68fbcbc68e14ad55e84265d69.  We in fact require that
    these operations are always issued with LK_SHARED.  Additionally,
    these directives can produce a false positive in certain VV_CROSSLOCK
    cases which require upgrading of the covered vnode lock from shared
    to exclusive.
    
    While here, replace the runtime check of LK_SHARED with a KASSERT and
    expand the check to include LK_NOWAIT, which all callers pass.
    
    Reviewed by:    kib
    Tested by:      pho
    Differential Revision:  https://reviews.freebsd.org/D35054
---
 sys/kern/vfs_lookup.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index 589decb14fc2..318dcf6fb72b 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -105,21 +105,15 @@ crossmp_vop_lock1(struct vop_lock1_args *ap)
 {
 	struct vnode *vp;
 	struct lock *lk __diagused;
-	const char *file __witness_used;
-	int flags, line __witness_used;
+	int flags;
 
 	vp = ap->a_vp;
 	lk = vp->v_vnlock;
 	flags = ap->a_flags;
-	file = ap->a_file;
-	line = ap->a_line;
 
-	if ((flags & LK_SHARED) == 0)
-		panic("invalid lock request for crossmp");
+	KASSERT((flags & (LK_SHARED | LK_NOWAIT)) == (LK_SHARED | LK_NOWAIT),
+	    ("%s: invalid lock request 0x%x for crossmp", __func__, flags));
 
-	WITNESS_CHECKORDER(&lk->lock_object, LOP_NEWORDER, file, line,
-	    flags & LK_INTERLOCK ? &VI_MTX(vp)->lock_object : NULL);
-	WITNESS_LOCK(&lk->lock_object, 0, file, line);
 	if ((flags & LK_INTERLOCK) != 0)
 		VI_UNLOCK(vp);
 	LOCK_LOG_LOCK("SLOCK", &lk->lock_object, 0, 0, ap->a_file, ap->a_line);
@@ -135,7 +129,6 @@ crossmp_vop_unlock(struct vop_unlock_args *ap)
 	vp = ap->a_vp;
 	lk = vp->v_vnlock;
 
-	WITNESS_UNLOCK(&lk->lock_object, 0, LOCK_FILE, LOCK_LINE);
 	LOCK_LOG_LOCK("SUNLOCK", &lk->lock_object, 0, 0, LOCK_FILE,
 	    LOCK_LINE);
 	return (0);