git: 36960099a008 - stable/13 - vfs_mount.c: convert explicit panics and KASSERTs to MPASSERT/MPPASS

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Wed, 06 Jul 2022 12:33:51 UTC
The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=36960099a008f6fbdfee1b6c43e0226832da2cbf

commit 36960099a008f6fbdfee1b6c43e0226832da2cbf
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2022-06-29 11:37:58 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-07-06 12:33:30 +0000

    vfs_mount.c: convert explicit panics and KASSERTs to MPASSERT/MPPASS
    
    (cherry picked from commit ad175a107b4e0fdc0128c98c3ca9d6cf8006aba7)
---
 sys/kern/vfs_mount.c | 57 +++++++++++++++++++++-------------------------------
 1 file changed, 23 insertions(+), 34 deletions(-)

diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index e14b1e882501..6e2945c91e1c 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -542,12 +542,10 @@ vfs_mount_alloc(struct vnode *vp, struct vfsconf *vfsp, const char *fspath,
 	mp->mnt_nvnodelistsize = 0;
 	TAILQ_INIT(&mp->mnt_lazyvnodelist);
 	mp->mnt_lazyvnodelistsize = 0;
-	if (mp->mnt_ref != 0 || mp->mnt_lockref != 0 ||
-	    mp->mnt_writeopcount != 0)
-		panic("%s: non-zero counters on new mp %p\n", __func__, mp);
-	if (mp->mnt_vfs_ops != 1)
-		panic("%s: vfs_ops should be 1 but %d found\n", __func__,
-		    mp->mnt_vfs_ops);
+	MPPASS(mp->mnt_ref == 0 && mp->mnt_lockref == 0 &&
+	    mp->mnt_writeopcount == 0, mp);
+	MPASSERT(mp->mnt_vfs_ops == 1, mp,
+	    ("vfs_ops should be 1 but %d found", mp->mnt_vfs_ops));
 	(void) vfs_busy(mp, MBF_NOWAIT);
 	atomic_add_acq_int(&vfsp->vfc_refcount, 1);
 	mp->mnt_op = vfsp->vfc_vfsops;
@@ -576,8 +574,7 @@ void
 vfs_mount_destroy(struct mount *mp)
 {
 
-	if (mp->mnt_vfs_ops == 0)
-		panic("%s: entered with zero vfs_ops\n", __func__);
+	MPPASS(mp->mnt_vfs_ops != 0, mp);
 
 	vfs_assert_mount_counters(mp);
 
@@ -592,10 +589,8 @@ vfs_mount_destroy(struct mount *mp)
 	KASSERT(mp->mnt_ref == 0,
 	    ("%s: invalid refcount in the drain path @ %s:%d", __func__,
 	    __FILE__, __LINE__));
-	if (mp->mnt_writeopcount != 0)
-		panic("vfs_mount_destroy: nonzero writeopcount");
-	if (mp->mnt_secondary_writes != 0)
-		panic("vfs_mount_destroy: nonzero secondary_writes");
+	MPPASS(mp->mnt_writeopcount == 0, mp);
+	MPPASS(mp->mnt_secondary_writes == 0, mp);
 	atomic_subtract_rel_int(&mp->mnt_vfc->vfc_refcount, 1);
 	if (!TAILQ_EMPTY(&mp->mnt_nvnodelist)) {
 		struct vnode *vp;
@@ -605,21 +600,16 @@ vfs_mount_destroy(struct mount *mp)
 		panic("unmount: dangling vnode");
 	}
 	KASSERT(TAILQ_EMPTY(&mp->mnt_uppers), ("mnt_uppers"));
-	if (mp->mnt_nvnodelistsize != 0)
-		panic("vfs_mount_destroy: nonzero nvnodelistsize");
-	if (mp->mnt_lazyvnodelistsize != 0)
-		panic("vfs_mount_destroy: nonzero lazyvnodelistsize");
-	if (mp->mnt_lockref != 0)
-		panic("vfs_mount_destroy: nonzero lock refcount");
+	MPPASS(mp->mnt_nvnodelistsize == 0, mp);
+	MPPASS(mp->mnt_lazyvnodelistsize == 0, mp);
+	MPPASS(mp->mnt_lockref == 0, mp);
 	MNT_IUNLOCK(mp);
 
-	if (mp->mnt_vfs_ops != 1)
-		panic("%s: vfs_ops should be 1 but %d found\n", __func__,
-		    mp->mnt_vfs_ops);
+	MPASSERT(mp->mnt_vfs_ops == 1, mp,
+	    ("vfs_ops should be 1 but %d found", mp->mnt_vfs_ops));
 
-	if (mp->mnt_rootvnode != NULL)
-		panic("%s: mount point still has a root vnode %p\n", __func__,
-		    mp->mnt_rootvnode);
+	MPASSERT(mp->mnt_rootvnode == NULL, mp,
+	    ("mount point still has a root vnode %p", mp->mnt_rootvnode));
 
 	if (mp->mnt_vnodecovered != NULL)
 		vrele(mp->mnt_vnodecovered);
@@ -1589,9 +1579,10 @@ vfs_op_enter(struct mount *mp)
 		mp->mnt_writeopcount += mpcpu->mntp_writeopcount;
 		mpcpu->mntp_writeopcount = 0;
 	}
-	if (mp->mnt_ref <= 0 || mp->mnt_lockref < 0 || mp->mnt_writeopcount < 0)
-		panic("%s: invalid count(s) on mp %p: ref %d lockref %d writeopcount %d\n",
-		    __func__, mp, mp->mnt_ref, mp->mnt_lockref, mp->mnt_writeopcount);
+	MPASSERT(mp->mnt_ref > 0 && mp->mnt_lockref >= 0 &&
+	    mp->mnt_writeopcount >= 0, mp,
+	    ("invalid count(s): ref %d lockref %d writeopcount %d",
+	    mp->mnt_ref, mp->mnt_lockref, mp->mnt_writeopcount));
 	MNT_IUNLOCK(mp);
 	vfs_assert_mount_counters(mp);
 }
@@ -1602,13 +1593,11 @@ vfs_op_exit_locked(struct mount *mp)
 
 	mtx_assert(MNT_MTX(mp), MA_OWNED);
 
-	if (mp->mnt_vfs_ops <= 0)
-		panic("%s: invalid vfs_ops count %d for mp %p\n",
-		    __func__, mp->mnt_vfs_ops, mp);
-	KASSERT(mp->mnt_vfs_ops > 1 ||
-	    (mp->mnt_kern_flag & (MNTK_UNMOUNT | MNTK_SUSPEND)) == 0,
-	    ("%s: vfs_ops too low (%d) for mp %p in unmount or suspend",
-	    __func__, mp->mnt_vfs_ops, mp));
+	MPASSERT(mp->mnt_vfs_ops > 0, mp,
+	    ("invalid vfs_ops count %d", mp->mnt_vfs_ops));
+	MPASSERT(mp->mnt_vfs_ops > 1 ||
+	    (mp->mnt_kern_flag & (MNTK_UNMOUNT | MNTK_SUSPEND)) == 0, mp,
+	    ("vfs_ops too low %d in unmount or suspend", mp->mnt_vfs_ops));
 	mp->mnt_vfs_ops--;
 }