PERFORCE change 112747 for review

Adam Martin adamartin at FreeBSD.org
Wed Jan 10 16:58:26 PST 2007


http://perforce.freebsd.org/chv.cgi?CH=112747

Change 112747 by adamartin at adamartin_hobbes on 2007/01/11 00:57:34

	Autofs working on templatefs now.  Need to make templatefs non-static
	in creation time now.

Affected files ...

.. //depot/projects/soc2006/adamartin_autofs/autofs/Makefile#7 edit
.. //depot/projects/soc2006/adamartin_autofs/autofs/autofs.c#9 edit
.. //depot/projects/soc2006/adamartin_autofs/autofs/autofs_tfsops.c#2 edit
.. //depot/projects/soc2006/adamartin_autofs/autofs/autofs_types.h#3 edit
.. //depot/projects/soc2006/adamartin_autofs/templatefs/templatefs.c#2 edit

Differences ...

==== //depot/projects/soc2006/adamartin_autofs/autofs/Makefile#7 (text+ko) ====

@@ -27,7 +27,7 @@
 
 
 AUTOFS_DEV_SOURCE=autofs_ctl.c autofs_dev.c
-AUTOFS_FS_SOURCE=autofs_pfsops.c vnode_if.h 
+AUTOFS_FS_SOURCE=autofs_tfsops.c vnode_if.h 
 AUTOFS_CORE_SOURCE=autofs.c protocol.c
 AUTOFS_SUPPORT_SOURCE=autofs_subr.c
 SRCS=$(AUTOFS_CORE_SOURCE) $(AUTOFS_FS_SOURCE) $(AUTOFS_DEV_SOURCE) $(AUTOFS_SUPPORT_SOURCE)

==== //depot/projects/soc2006/adamartin_autofs/autofs/autofs.c#9 (text+ko) ====

@@ -111,7 +111,7 @@
 
 
 
-#if 0
+#if NEVER_DEFINED
 static int
 vn_iscdev( struct vnode *vp, int *errp )
 {
@@ -146,3 +146,4 @@
 
 
 DEV_MODULE( AutoFS, autofs_handle_loader, NULL );
+MODULE_DEPEND( AutoFS, templatefs, 1, 1, 1 );

==== //depot/projects/soc2006/adamartin_autofs/autofs/autofs_tfsops.c#2 (text+ko) ====

@@ -54,7 +54,7 @@
 #include <machine/setjmp.h>
 #include "cleanup.h"
 
-#include <fs/pseudofs/pseudofs.h>
+#include "../templatefs/templatefs.h"
 
 #include <sys/time.h>
 
@@ -67,17 +67,17 @@
 MALLOC_DEFINE( M_AUTOFS_MOUNTBUF, "AutoFS mntbuf",
 		"AutoFS mountpoint data, to simulate filesystem contents.");
 
-struct pfs_node *foo;
+struct tfs_node *foo;
 
 static int
-autofs_vis(PFS_VIS_ARGS)
+autofs_vis( TFS_VIS_ARGS )
 {
 	KPRINTF( "autofs visibility called\n" );
 	return 0;
 }
 
 static int
-autofs_attr( PFS_ATTR_ARGS )
+autofs_attr( TFS_ATTR_ARGS )
 {
 	KPRINTF( "autofs attr called\n" );
 	return 0;
@@ -100,18 +100,21 @@
 
 
 static int
-autofs_lookup( PFS_LOOKUP_ARGS )
+autofs_lookup( TFS_LOOKUP_ARGS )
 {
 	struct componentname c= *cnp;
 	struct message_header	msg;
 	struct mount_request	mr;
-	struct pfs_info		*pi;
-	autofs_info_t		*instance;
+	struct tfs_info		*ti;
+
+	autofs_instance_t	*instance;
+	autofs_dev_bufs_t	*buffers;
 
 
-	pi=	pn->pn_info;
+	ti=	tn->tn_info;
 
-	instance=	AUTOFS_GET_PRIVATE( pi );
+	instance=	AUTOFS_GET_INSTANCE( NODE, tn );
+	buffers=	AUTOFS_GET_BUFFERS( NODE, tn );
 
 	DEBUG1 KPRINTF( "autofs lookup called\n" );
 	DEBUG7 KPRINTF( "cn_nameptr= %s, cn_pnbuf= %s\n", c.cn_nameptr,
@@ -133,14 +136,60 @@
 
 	//if( take_autofs_lock( instance, node ) )
 	//{
-		send_mount_request( &msg, instance->output );
+		send_mount_request( &msg, buffers->output );
 	//}
 	
 	return 1;
 }
 
+
 static int
-autofs_init(struct pfs_info *pi, struct vfsconf *vfc)
+autofs_mount_handler( TFS_MOUNT_HANDLER_ARGS )
+{
+	struct vnode		*devvp;
+	struct cdev		*dev;
+	struct nameidata	nd;
+	struct nameidata	*ndp;
+	int			error;
+	char			*dev_name;
+	int			dev_name_len;
+	struct vfsoptlist	*opts;
+
+	error= 0;
+
+	ndp= &nd;
+	opts= mp->mnt_optnew;
+
+	error= vfs_getopt( opts, MNT_DEVICE, (void **) &dev_name,
+			&dev_name_len );
+
+	if( !error && dev_name[ dev_name_len - 1 ] != '\0' )
+	{
+		return ( EINVAL );
+	}
+
+	NDINIT( ndp, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, dev_name, td );
+	if( ( error= namei( ndp ) ) )
+	{
+		return ( error );
+	}
+	NDFREE( ndp, NDF_ONLY_PNBUF );
+	devvp= ndp->ni_vp;
+
+	/** Take the lock here, and get the struct cdev out of it, and use the
+	private data there, to assign the instance. **/
+
+	dev= devvp->v_rdev;
+
+	/** Now we have the dev object.  Work with it. **/
+
+	ti->ti_priv= (void *) AUTOFS_GET_INSTANCE( DEV, dev );
+
+	return error;
+}
+
+static int
+autofs_init(struct tfs_info *ti, struct vfsconf *vfc)
 {
 	struct vnode *devvp;
 	struct cdev *dev;
@@ -153,7 +202,7 @@
 
 	/** Get the fake device vnode from name **/
 
-	NDINIT( ndp, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, pi->pi_name, td );
+	NDINIT( ndp, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, ti->ti_name, td );
 	if( ( error= namei( ndp ) ) != 0 )
 	{
 		return error;
@@ -171,23 +220,23 @@
 	pfs_info object  (I think we need to release the vnode too!)*/
 
 	dev= devvp->v_rdev;
-	pi->pi_priv= (void *) dev;
+	ti->ti_priv= (void *) dev;
 	VOP_UNLOCK( devvp, LK_RELEASE, td );
 
 
 	/** Make some fake files... **/
 
-	foo= pfs_create_dir( pi->pi_root, "foo", autofs_attr, autofs_vis, 0 ); 
-	foo->pn_lookup= autofs_lookup;
+	foo= tfs_create_dir( ti->ti_root, "foo", autofs_attr, autofs_vis, 0 ); 
+	foo->tn_lookup= autofs_lookup;
 	return 0;
 }
 
 
 static int
-autofs_uninit(struct pfs_info *pi, struct vfsconf *vfc)
+autofs_uninit(struct tfs_info *ti, struct vfsconf *vfc)
 {
 	return 0;
 }
 
 
-PSEUDOFS( autofs, AUTOFS_VERSION );
+TEMPLATEFS( autofs, AUTOFS_VERSION, autofs_mount_handler );

==== //depot/projects/soc2006/adamartin_autofs/autofs/autofs_types.h#3 (text+ko) ====

@@ -8,7 +8,7 @@
 /** Kernel forward definitions **/
 
 struct vnode;
-struct pfs_node;
+struct tfs_node;
 struct proc;
 struct cdev;
 struct mbuf;
@@ -111,9 +111,9 @@
 	DEV - the input/output device of the AutoFS system
 	NODE - a node (mountpoint) within the AutoFS system
 	INSTANCE - the instance descriptor of an AutoFS system
-	ROOT - the pfs_info (vfs_info) descriptor of the underlying pseudofs
+	ROOT - the tfs_info (vfs_info) descriptor of the underlying templatefs
 
-E.G.: AUTOFS_GET_BUFFERS( ROOT, autofs_pfs_info )
+E.G.: AUTOFS_GET_BUFFERS( ROOT, autofs_tfs_info )
 E.G.: AUTOFS_GET_TXNS( DEV, autofs_cdevsw )
 
 one can get:
@@ -142,10 +142,10 @@
 	( ( dev )->si_priv )
 
 #define AUTOFS_NODE_GET_INSTANCE( node )\
-	( ( node )->pn_priv )
+	( ( node )->tn_data )
 
-#define AUTOFS_ROOT_GET_INSTANCE( p_info )\
-	( ( p_info )->pi_priv )
+#define AUTOFS_ROOT_GET_INSTANCE( t_info )\
+	( ( t_info )->ti_priv )
 
 #define AUTOFS_INSTANCE_GET_INSTANCE( instance )\
 	( ( instance ) )

==== //depot/projects/soc2006/adamartin_autofs/templatefs/templatefs.c#2 (text+ko) ====

@@ -360,6 +360,7 @@
 
 /*
  * Initialize a (static) pseudofs instance
+ * ADAM -- if it's static, then this is bad... we need it at dynamic time.
  */
 int
 tfs_init(struct tfs_info *ti, struct vfsconf *vfc)
@@ -369,6 +370,7 @@
 
 	mtx_init(&ti->ti_mutex, "pseudofs", NULL, MTX_DEF);
 
+	/** TODO, should this be moved to mount?  How much of it? **/
 	/* set up the root diretory */
 	MALLOC(root, struct tfs_node *, sizeof *root,
 	    M_TFSNODES, M_WAITOK|M_ZERO);


More information about the p4-projects mailing list