xref: /csrg-svn/sys/kern/vfs_conf.c (revision 68561)
137488Smckusick /*
263180Sbostic  * Copyright (c) 1989, 1993
363180Sbostic  *	The Regents of the University of California.  All rights reserved.
437488Smckusick  *
544456Sbostic  * %sccs.include.redist.c%
637488Smckusick  *
7*68561Smckusick  *	@(#)vfs_conf.c	8.9 (Berkeley) 03/21/95
837488Smckusick  */
937488Smckusick 
1051456Sbostic #include <sys/param.h>
1151456Sbostic #include <sys/mount.h>
1253494Sheideman #include <sys/vnode.h>
1351519Sbostic 
1451519Sbostic #ifdef FFS
15*68561Smckusick #include <ufs/ufs/dinode.h>
1651456Sbostic #include <ufs/ffs/ffs_extern.h>
1737488Smckusick 
1837488Smckusick /*
1937488Smckusick  * This specifies the filesystem used to mount the root.
2037488Smckusick  * This specification should be done by /etc/config.
2137488Smckusick  */
2251456Sbostic int (*mountroot)() = ffs_mountroot;
2351519Sbostic #endif
2437488Smckusick 
2537488Smckusick /*
2637488Smckusick  * These define the root filesystem and device.
2737488Smckusick  */
2837488Smckusick struct mount *rootfs;
2964407Sbostic struct vnode *rootvnode;
3037488Smckusick 
3137488Smckusick /*
3237488Smckusick  * Set up the filesystem operations for vnodes.
3337488Smckusick  * The types are defined in mount.h.
3437488Smckusick  */
3551519Sbostic #ifdef FFS
3637488Smckusick extern	struct vfsops ufs_vfsops;
3752414Storek #define	UFS_VFSOPS	&ufs_vfsops
3852414Storek #else
3952414Storek #define	UFS_VFSOPS	NULL
4051519Sbostic #endif
4137488Smckusick 
4251456Sbostic #ifdef LFS
4351456Sbostic extern	struct vfsops lfs_vfsops;
4452414Storek #define	LFS_VFSOPS	&lfs_vfsops
4552414Storek #else
4652414Storek #define	LFS_VFSOPS	NULL
4737488Smckusick #endif
4837488Smckusick 
4939046Smckusick #ifdef MFS
5039046Smckusick extern	struct vfsops mfs_vfsops;
5152414Storek #define	MFS_VFSOPS	&mfs_vfsops
5252414Storek #else
5352414Storek #define	MFS_VFSOPS	NULL
5439046Smckusick #endif
5539046Smckusick 
5651456Sbostic #ifdef NFS
5751456Sbostic extern	struct vfsops nfs_vfsops;
5852414Storek #define	NFS_VFSOPS	&nfs_vfsops
5952414Storek #else
6052414Storek #define	NFS_VFSOPS	NULL
6151456Sbostic #endif
6251456Sbostic 
6353827Spendry #ifdef FDESC
6453827Spendry extern	struct vfsops fdesc_vfsops;
6553827Spendry #define	FDESC_VFSOPS	&fdesc_vfsops
6653827Spendry #else
6753827Spendry #define	FDESC_VFSOPS	NULL
6853827Spendry #endif
6953827Spendry 
7053827Spendry #ifdef PORTAL
7153827Spendry extern	struct vfsops portal_vfsops;
7253827Spendry #define	PORTAL_VFSOPS	&portal_vfsops
7353827Spendry #else
7453827Spendry #define	PORTAL_VFSOPS	NULL
7553827Spendry #endif
7653827Spendry 
7754989Sheideman #ifdef NULLFS
7854989Sheideman extern	struct vfsops null_vfsops;
7954989Sheideman #define NULL_VFSOPS	&null_vfsops
8054989Sheideman #else
8154989Sheideman #define NULL_VFSOPS	NULL
8254989Sheideman #endif
8354989Sheideman 
8454989Sheideman #ifdef UMAPFS
8554989Sheideman extern	struct vfsops umap_vfsops;
8654989Sheideman #define UMAP_VFSOPS	&umap_vfsops
8754989Sheideman #else
8854989Sheideman #define UMAP_VFSOPS	NULL
8954989Sheideman #endif
9054989Sheideman 
9155336Spendry #ifdef KERNFS
9255336Spendry extern	struct vfsops kernfs_vfsops;
9355336Spendry #define KERNFS_VFSOPS	&kernfs_vfsops
9455336Spendry #else
9555336Spendry #define KERNFS_VFSOPS	NULL
9655336Spendry #endif
9754989Sheideman 
9865147Spendry #ifdef PROCFS
9965147Spendry extern	struct vfsops procfs_vfsops;
10065147Spendry #define PROCFS_VFSOPS	&procfs_vfsops
10165147Spendry #else
10265147Spendry #define PROCFS_VFSOPS	NULL
10365147Spendry #endif
10455336Spendry 
10565669Shibler #ifdef AFS
10665669Shibler extern	struct vfsops afs_vfsops;
10765669Shibler #define AFS_VFSOPS	&afs_vfsops
10865669Shibler #else
10965669Shibler #define AFS_VFSOPS	NULL
11065669Shibler #endif
11165669Shibler 
11265897Shibler #ifdef CD9660
11365899Shibler extern	struct vfsops cd9660_vfsops;
11465899Shibler #define CD9660_VFSOPS	&cd9660_vfsops
11565669Shibler #else
11665899Shibler #define CD9660_VFSOPS	NULL
11765669Shibler #endif
11865669Shibler 
11965937Spendry #ifdef UNION
12065937Spendry extern	struct vfsops union_vfsops;
12165937Spendry #define	UNION_VFSOPS	&union_vfsops
12265937Spendry #else
12365937Spendry #define	UNION_VFSOPS	NULL
12465937Spendry #endif
12565937Spendry 
12637488Smckusick struct vfsops *vfssw[] = {
12751456Sbostic 	NULL,			/* 0 = MOUNT_NONE */
12852414Storek 	UFS_VFSOPS,		/* 1 = MOUNT_UFS */
12952414Storek 	NFS_VFSOPS,		/* 2 = MOUNT_NFS */
13052414Storek 	MFS_VFSOPS,		/* 3 = MOUNT_MFS */
13151456Sbostic 	NULL,			/* 4 = MOUNT_PC */
13252414Storek 	LFS_VFSOPS,		/* 5 = MOUNT_LFS */
13366526Spendry 	NULL,			/* 6 = MOUNT_LOFS */
13453827Spendry 	FDESC_VFSOPS,		/* 7 = MOUNT_FDESC */
13553827Spendry 	PORTAL_VFSOPS,		/* 8 = MOUNT_PORTAL */
13654989Sheideman 	NULL_VFSOPS,		/* 9 = MOUNT_NULL */
13754989Sheideman 	UMAP_VFSOPS,		/* 10 = MOUNT_UMAP */
13855336Spendry 	KERNFS_VFSOPS,		/* 11 = MOUNT_KERNFS */
13965147Spendry 	PROCFS_VFSOPS,		/* 12 = MOUNT_PROCFS */
14065669Shibler 	AFS_VFSOPS,		/* 13 = MOUNT_AFS */
14165899Shibler 	CD9660_VFSOPS,		/* 14 = MOUNT_CD9660 */
14265937Spendry 	UNION_VFSOPS,		/* 15 = MOUNT_UNION */
14354989Sheideman 	0
14437488Smckusick };
14553579Sheideman 
14653579Sheideman 
14753579Sheideman /*
14853579Sheideman  *
14954724Sbostic  * vfs_opv_descs enumerates the list of vnode classes, each with it's own
15054724Sbostic  * vnode operation vector.  It is consulted at system boot to build operation
15154724Sbostic  * vectors.  It is NULL terminated.
15253579Sheideman  *
15353579Sheideman  */
15453579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
15553579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc;
15653579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc;
15753579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
15853579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc;
15953579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc;
16053579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
16153579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc;
16253579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
16353579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc;
16453579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
16553579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
16653579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
16753943Spendry extern struct vnodeopv_desc fdesc_vnodeop_opv_desc;
16853943Spendry extern struct vnodeopv_desc portal_vnodeop_opv_desc;
16954989Sheideman extern struct vnodeopv_desc null_vnodeop_opv_desc;
17054989Sheideman extern struct vnodeopv_desc umap_vnodeop_opv_desc;
17155336Spendry extern struct vnodeopv_desc kernfs_vnodeop_opv_desc;
17265147Spendry extern struct vnodeopv_desc procfs_vnodeop_opv_desc;
17365899Shibler extern struct vnodeopv_desc cd9660_vnodeop_opv_desc;
17465899Shibler extern struct vnodeopv_desc cd9660_specop_opv_desc;
17565899Shibler extern struct vnodeopv_desc cd9660_fifoop_opv_desc;
17665937Spendry extern struct vnodeopv_desc union_vnodeop_opv_desc;
17753579Sheideman 
17853579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = {
17953579Sheideman 	&ffs_vnodeop_opv_desc,
18053579Sheideman 	&ffs_specop_opv_desc,
18154343Smckusick #ifdef FIFO
18253579Sheideman 	&ffs_fifoop_opv_desc,
18354343Smckusick #endif
18453760Smckusick 	&dead_vnodeop_opv_desc,
18554343Smckusick #ifdef FIFO
18653760Smckusick 	&fifo_vnodeop_opv_desc,
18754343Smckusick #endif
18853760Smckusick 	&spec_vnodeop_opv_desc,
18953760Smckusick #ifdef LFS
19053579Sheideman 	&lfs_vnodeop_opv_desc,
19153579Sheideman 	&lfs_specop_opv_desc,
19254343Smckusick #ifdef FIFO
19353579Sheideman 	&lfs_fifoop_opv_desc,
19453760Smckusick #endif
19554343Smckusick #endif
19653760Smckusick #ifdef MFS
19753579Sheideman 	&mfs_vnodeop_opv_desc,
19853760Smckusick #endif
19953760Smckusick #ifdef NFS
20053579Sheideman 	&nfsv2_vnodeop_opv_desc,
20153579Sheideman 	&spec_nfsv2nodeop_opv_desc,
20254343Smckusick #ifdef FIFO
20353579Sheideman 	&fifo_nfsv2nodeop_opv_desc,
20453760Smckusick #endif
20554343Smckusick #endif
20653943Spendry #ifdef FDESC
20753943Spendry 	&fdesc_vnodeop_opv_desc,
20853943Spendry #endif
20953943Spendry #ifdef PORTAL
21053943Spendry 	&portal_vnodeop_opv_desc,
21153943Spendry #endif
21254989Sheideman #ifdef NULLFS
21354989Sheideman 	&null_vnodeop_opv_desc,
21454989Sheideman #endif
21554989Sheideman #ifdef UMAPFS
21654989Sheideman 	&umap_vnodeop_opv_desc,
21754989Sheideman #endif
21855336Spendry #ifdef KERNFS
21955336Spendry 	&kernfs_vnodeop_opv_desc,
22055336Spendry #endif
22165147Spendry #ifdef PROCFS
22265147Spendry 	&procfs_vnodeop_opv_desc,
22365147Spendry #endif
22465897Shibler #ifdef CD9660
22565899Shibler 	&cd9660_vnodeop_opv_desc,
22665899Shibler 	&cd9660_specop_opv_desc,
22765669Shibler #ifdef FIFO
22865899Shibler 	&cd9660_fifoop_opv_desc,
22965669Shibler #endif
23065669Shibler #endif
23165937Spendry #ifdef UNION
23265937Spendry 	&union_vnodeop_opv_desc,
23365937Spendry #endif
23453579Sheideman 	NULL
23553579Sheideman };
236