git: 430287781dea - stable/15 - g_vfs_close_unlocked(9): wrapper around g_vfs_close(9)

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Thu, 01 Oct 2026 01:17:16 UTC
The branch stable/15 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=430287781dea25174e34fc9834143e7e2d30c4c3

commit 430287781dea25174e34fc9834143e7e2d30c4c3
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-09-20 10:27:07 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-09-30 21:37:18 +0000

    g_vfs_close_unlocked(9): wrapper around g_vfs_close(9)
    
    (cherry picked from commit 87962e08fa18797103c96c17fd8c88ada056e0c0)
---
 sys/geom/geom_vfs.c | 13 +++++++++++++
 sys/geom/geom_vfs.h |  4 +++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/sys/geom/geom_vfs.c b/sys/geom/geom_vfs.c
index 122e2f6a02ec..74723f43081c 100644
--- a/sys/geom/geom_vfs.c
+++ b/sys/geom/geom_vfs.c
@@ -338,3 +338,16 @@ g_vfs_close(struct g_consumer *cp)
 	KASSERT(sc->sc_event == NULL, ("g_vfs %p event is non-NULL", sc));
 	g_free(sc);
 }
+
+void
+g_vfs_close_unlocked(struct g_consumer *cp)
+{
+	struct vnode *vp;
+
+	vp = cp->private;
+	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+	g_topology_lock();
+	g_vfs_close(cp);
+	g_topology_unlock();
+	VOP_UNLOCK(vp);
+}
diff --git a/sys/geom/geom_vfs.h b/sys/geom/geom_vfs.h
index 56b91dd10c3b..01efc3e19d41 100644
--- a/sys/geom/geom_vfs.h
+++ b/sys/geom/geom_vfs.h
@@ -36,7 +36,9 @@ struct buf;
 extern struct buf_ops *g_vfs_bufops;
 
 void g_vfs_strategy(struct bufobj *bo, struct buf *bp);
-int g_vfs_open(struct vnode *vp, struct g_consumer **cpp, const char *fsname, int wr);
+int g_vfs_open(struct vnode *vp, struct g_consumer **cpp,
+    const char *fsname, int wr);
 void g_vfs_close(struct g_consumer *cp);
+void g_vfs_close_unlocked(struct g_consumer *cp);
 
 #endif /* _GEOM_GEOM_VFS_H_ */