Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Sep 2025 12:52:36 GMT
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: d3462294c1f0 - main - Revert "pseudofs: defer initialization until first mount"
Message-ID:  <202509041252.584Cqaeh035000@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kevans:

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

commit d3462294c1f02ca20cc1869d618bde57559f5914
Author:     Kyle Evans <kevans@FreeBSD.org>
AuthorDate: 2025-09-04 12:48:18 +0000
Commit:     Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2025-09-04 12:51:41 +0000

    Revert "pseudofs: defer initialization until first mount"
    
    This reverts commit 65059dd2b6f94e570acc645be82b8ea056316459.
    
    lindebugfs does he vast majority of its pseudofs initialization nearly
    everywhere but pseudofs, so let's defer this to post-brsnching.
---
 sys/fs/pseudofs/pseudofs.c    | 71 +++++--------------------------------------
 sys/fs/pseudofs/pseudofs.h    | 33 +++++++++-----------
 sys/modules/pseudofs/Makefile |  4 +--
 3 files changed, 24 insertions(+), 84 deletions(-)

diff --git a/sys/fs/pseudofs/pseudofs.c b/sys/fs/pseudofs/pseudofs.c
index 26a1dcd4ad39..7a4e67455214 100644
--- a/sys/fs/pseudofs/pseudofs.c
+++ b/sys/fs/pseudofs/pseudofs.c
@@ -40,18 +40,13 @@
 #include <sys/mount.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
-#include <sys/refcount.h>
 #include <sys/sbuf.h>
-#include <sys/sx.h>
 #include <sys/sysctl.h>
 #include <sys/vnode.h>
 
 #include <fs/pseudofs/pseudofs.h>
 #include <fs/pseudofs/pseudofs_internal.h>
 
-static int pfs_setup(struct pfs_info *pi, struct vfsconf *vfc);
-static int pfs_teardown(struct pfs_info *pi, struct vfsconf *vfc);
-
 static MALLOC_DEFINE(M_PFSNODES, "pfs_nodes", "pseudofs nodes");
 
 SYSCTL_NODE(_vfs, OID_AUTO, pfs, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
@@ -407,20 +402,10 @@ int
 pfs_mount(struct pfs_info *pi, struct mount *mp)
 {
 	struct statfs *sbp;
-	int error = 0;
 
 	if (mp->mnt_flag & MNT_UPDATE)
 		return (EOPNOTSUPP);
 
-	sx_xlock(&pi->pi_mountlock);
-	if (pi->pi_root == NULL)
-		error = pfs_setup(pi, mp->mnt_vfc);
-	if (error == 0)
-		refcount_acquire(&pi->pi_mounts);
-	sx_xunlock(&pi->pi_mountlock);
-	if (error != 0)
-		return (error);
-
 	MNT_ILOCK(mp);
 	mp->mnt_flag |= MNT_LOCAL;
 	mp->mnt_kern_flag |= MNTK_NOMSYNC;
@@ -459,23 +444,10 @@ pfs_cmount(struct mntarg *ma, void *data, uint64_t flags)
 int
 pfs_unmount(struct mount *mp, int mntflags)
 {
-	struct pfs_info *pi;
 	int error;
 
 	error = vflush(mp, 0, (mntflags & MNT_FORCE) ?  FORCECLOSE : 0,
 	    curthread);
-	if (error != 0)
-		return (error);
-
-	pi = (struct pfs_info *)mp->mnt_data;
-	sx_xlock(&pi->pi_mountlock);
-	if (!refcount_release_if_not_last(&pi->pi_mounts)) {
-		error = pfs_teardown(pi, mp->mnt_vfc);
-		if (error == 0)
-			refcount_release(&pi->pi_mounts);
-	}
-	sx_xunlock(&pi->pi_mountlock);
-
 	return (error);
 }
 
@@ -501,36 +473,11 @@ pfs_statfs(struct mount *mp, struct statfs *sbp)
 	return (0);
 }
 
-/*
- * Initialize pseudofs synchronization bits.  These will generally be needed
- * in order to avoid problems with parallel mounting of pseudofs consumers.
- */
-int
-pfs_vfsinit(struct pfs_info *pi, struct vfsconf *vfc)
-{
-
-	sx_init(&pi->pi_mountlock, "pfs mountlock");
-	refcount_init(&pi->pi_mounts, 0);
-	return (0);
-}
-
-int
-pfs_vfsuninit(struct pfs_info *pi, struct vfsconf *vfc)
-{
-
-	MPASS(pi->pi_root == NULL);
-	sx_destroy(&pi->pi_mountlock);
-
-	if (bootverbose)
-		printf("%s unregistered\n", pi->pi_name);
-	return (0);
-}
-
 /*
  * Initialize a pseudofs instance
  */
-static int
-pfs_setup(struct pfs_info *pi, struct vfsconf *vfc)
+int
+pfs_init(struct pfs_info *pi, struct vfsconf *vfc)
 {
 	struct pfs_node *root;
 	int error;
@@ -560,20 +507,18 @@ pfs_setup(struct pfs_info *pi, struct vfsconf *vfc)
 /*
  * Destroy a pseudofs instance
  */
-static int
-pfs_teardown(struct pfs_info *pi, struct vfsconf *vfc)
+int
+pfs_uninit(struct pfs_info *pi, struct vfsconf *vfc)
 {
 	int error;
 
-	MPASS(pi->pi_root != NULL);
-	error = (pi->pi_uninit)(pi, vfc);
-	if (error != 0)
-		return (error);
-
 	pfs_destroy(pi->pi_root);
 	pi->pi_root = NULL;
 	pfs_fileno_uninit(pi);
-	return (0);
+	if (bootverbose)
+		printf("%s unregistered\n", pi->pi_name);
+	error = (pi->pi_uninit)(pi, vfc);
+	return (error);
 }
 
 /*
diff --git a/sys/fs/pseudofs/pseudofs.h b/sys/fs/pseudofs/pseudofs.h
index e060f89b580f..2b08dcad978d 100644
--- a/sys/fs/pseudofs/pseudofs.h
+++ b/sys/fs/pseudofs/pseudofs.h
@@ -31,7 +31,6 @@
 #ifndef _PSEUDOFS_H_INCLUDED
 #define _PSEUDOFS_H_INCLUDED
 
-#include <sys/_sx.h>
 #include <sys/jail.h>
 
 /*
@@ -189,11 +188,9 @@ typedef int (*pfs_destroy_t)(PFS_DESTROY_ARGS);
 /*
  * pfs_info: describes a pseudofs instance
  *
- * The pi_mutex is used to avoid using the global subr_unit lock for unrhdr, and
- * the pi_mountlock is used to coordinate initialization of the consumer
- * filesystem on first mount.  The rest of struct pfs_info is only modified
- * during pi_init() and pi_uninit() of the consumer filesystem, which are fully
- * serialized.
+ * The pi_mutex is only used to avoid using the global subr_unit lock
+ * for unrhdr.  The rest of struct pfs_info is only modified during
+ * vfs_init() and vfs_uninit() of the consumer filesystem.
  */
 struct pfs_info {
 	char			 pi_name[PFS_FSNAMELEN];
@@ -201,11 +198,9 @@ struct pfs_info {
 	pfs_init_t		 pi_uninit;
 
 	/* members below this line are initialized at run time */
-	struct sx		 pi_mountlock;
 	struct pfs_node		*pi_root;
 	struct mtx		 pi_mutex;
 	struct unrhdr		*pi_unrhdr;
-	u_int			 pi_mounts;
 };
 
 /*
@@ -254,8 +249,8 @@ int		 pfs_unmount	(struct mount *mp, int mntflags);
 int		 pfs_root	(struct mount *mp, int flags,
 				 struct vnode **vpp);
 int		 pfs_statfs	(struct mount *mp, struct statfs *sbp);
-int		 pfs_vfsinit	(struct pfs_info *pi, struct vfsconf *vfc);
-int		 pfs_vfsuninit	(struct pfs_info *pi, struct vfsconf *vfc);
+int		 pfs_init	(struct pfs_info *pi, struct vfsconf *vfc);
+int		 pfs_uninit	(struct pfs_info *pi, struct vfsconf *vfc);
 
 /*
  * Directory structure construction and manipulation
@@ -282,9 +277,9 @@ int		 pfs_destroy	(struct pfs_node *pn);
 #define PSEUDOFS(name, version, flags)					\
 									\
 static struct pfs_info name##_info = {					\
-	.pi_name = #name,						\
-	.pi_init = name##_init,						\
-	.pi_uninit = name##_uninit,					\
+	#name,								\
+	name##_init,							\
+	name##_uninit,							\
 };									\
 									\
 static int								\
@@ -293,22 +288,22 @@ _##name##_mount(struct mount *mp) {					\
 }									\
 									\
 static int								\
-_##name##_vfsinit(struct vfsconf *vfc) {				\
-	return (pfs_vfsinit(&name##_info, vfc));			\
+_##name##_init(struct vfsconf *vfc) {					\
+	return (pfs_init(&name##_info, vfc));				\
 }									\
 									\
 static int								\
-_##name##_vfsuninit(struct vfsconf *vfc) {				\
-	return (pfs_vfsuninit(&name##_info, vfc));			\
+_##name##_uninit(struct vfsconf *vfc) {					\
+	return (pfs_uninit(&name##_info, vfc));				\
 }									\
 									\
 static struct vfsops name##_vfsops = {					\
 	.vfs_cmount =		pfs_cmount,				\
-	.vfs_init =		_##name##_vfsinit,			\
+	.vfs_init =		_##name##_init,				\
 	.vfs_mount =		_##name##_mount,			\
 	.vfs_root =		pfs_root,				\
 	.vfs_statfs =		pfs_statfs,				\
-	.vfs_uninit =		_##name##_vfsuninit,			\
+	.vfs_uninit =		_##name##_uninit,			\
 	.vfs_unmount =		pfs_unmount,				\
 };									\
 VFS_SET(name##_vfsops, name, VFCF_SYNTHETIC | flags);			\
diff --git a/sys/modules/pseudofs/Makefile b/sys/modules/pseudofs/Makefile
index 3928c950ab70..cb92b8912c86 100644
--- a/sys/modules/pseudofs/Makefile
+++ b/sys/modules/pseudofs/Makefile
@@ -13,8 +13,8 @@ EXPORT_SYMS=	pfs_cmount 	\
 		pfs_unmount	\
 		pfs_root	\
 		pfs_statfs	\
-		pfs_vfsinit	\
-		pfs_vfsuninit	\
+		pfs_init	\
+		pfs_uninit	\
 		pfs_create_dir	\
 		pfs_create_file	\
 		pfs_create_link	\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202509041252.584Cqaeh035000>