git: 6750c124c71c - stable/14 - md: Restore guards in mddestroy()

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Wed, 09 Jul 2025 00:38:54 UTC
The branch stable/14 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=6750c124c71c83eb6c4a6a349572ec24d7668441

commit 6750c124c71c83eb6c4a6a349572ec24d7668441
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2025-07-03 13:10:49 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-07-09 00:28:29 +0000

    md: Restore guards in mddestroy()
    
    (cherry picked from commit 5ae9f8e9ac5e1307fed4f7f2549347576f01b3fa)
---
 sys/dev/md/md.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index e89c5e858c32..95926706443b 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -1561,19 +1561,26 @@ mddestroy(struct md_s *sc, struct thread *td)
 	mtx_destroy(&sc->queue_mtx);
 	switch (sc->type) {
 	case MD_VNODE:
-		vn_lock(sc->s_vnode.vnode, LK_EXCLUSIVE | LK_RETRY);
-		sc->s_vnode.vnode->v_vflag &= ~VV_MD;
-		VOP_UNLOCK(sc->s_vnode.vnode);
-		(void)vn_close(sc->s_vnode.vnode, sc->flags & MD_READONLY ?
-		    FREAD : (FREAD|FWRITE), sc->cred, td);
-		kva_free(sc->s_vnode.kva, maxphys + PAGE_SIZE);
+		if (sc->s_vnode.vnode != NULL) {
+			vn_lock(sc->s_vnode.vnode, LK_EXCLUSIVE | LK_RETRY);
+			sc->s_vnode.vnode->v_vflag &= ~VV_MD;
+			VOP_UNLOCK(sc->s_vnode.vnode);
+			(void)vn_close(sc->s_vnode.vnode,
+			    sc->flags & MD_READONLY ?  FREAD : (FREAD|FWRITE),
+			    sc->cred, td);
+		}
+		if (sc->s_vnode.kva != 0)
+			kva_free(sc->s_vnode.kva, maxphys + PAGE_SIZE);
 		break;
 	case MD_SWAP:
-		vm_object_deallocate(sc->s_swap.object);
+		if (sc->s_swap.object != NULL)
+			vm_object_deallocate(sc->s_swap.object);
 		break;
 	case MD_MALLOC:
-		destroy_indir(sc, sc->s_malloc.indir);
-		uma_zdestroy(sc->s_malloc.uma);
+		if (sc->s_malloc.indir != NULL)
+			destroy_indir(sc, sc->s_malloc.indir);
+		if (sc->s_malloc.uma != NULL)
+			uma_zdestroy(sc->s_malloc.uma);
 		break;
 	case MD_PRELOAD:
 	case MD_NULL: