xref: /csrg-svn/sys/kern/vfs_conf.c (revision 69377)
137488Smckusick /*
268661Smckusick  * Copyright (c) 1989, 1993, 1995
363180Sbostic  *	The Regents of the University of California.  All rights reserved.
437488Smckusick  *
544456Sbostic  * %sccs.include.redist.c%
637488Smckusick  *
7*69377Smckusick  *	@(#)vfs_conf.c	8.11 (Berkeley) 05/10/95
837488Smckusick  */
937488Smckusick 
1051456Sbostic #include <sys/param.h>
1151456Sbostic #include <sys/mount.h>
1253494Sheideman #include <sys/vnode.h>
1351519Sbostic 
1437488Smckusick /*
15*69377Smckusick  * These define the root filesystem, device, and root filesystem type.
1637488Smckusick  */
17*69377Smckusick struct mount *rootfs;
18*69377Smckusick struct vnode *rootvnode;
19*69377Smckusick int (*mountroot)() = NULL;
2037488Smckusick 
2137488Smckusick /*
22*69377Smckusick  * Set up the initial array of known filesystem types.
2337488Smckusick  */
2468661Smckusick extern	struct vfsops ufs_vfsops;
25*69377Smckusick extern	int ffs_mountroot();
2668661Smckusick extern	struct vfsops lfs_vfsops;
27*69377Smckusick extern	int lfs_mountroot();
2868661Smckusick extern	struct vfsops mfs_vfsops;
29*69377Smckusick extern	int mfs_mountroot();
3068661Smckusick extern	struct vfsops cd9660_vfsops;
31*69377Smckusick extern	int cd9660_mountroot();
3268661Smckusick extern	struct vfsops msdos_vfsops;
3368661Smckusick extern	struct vfsops adosfs_vfsops;
3468661Smckusick extern	struct vfsops nfs_vfsops;
35*69377Smckusick extern	int nfs_mountroot();
3668661Smckusick extern	struct vfsops afs_vfsops;
3768661Smckusick extern	struct vfsops procfs_vfsops;
3868661Smckusick extern	struct vfsops null_vfsops;
3968661Smckusick extern	struct vfsops union_vfsops;
4068661Smckusick extern	struct vfsops umap_vfsops;
4168661Smckusick extern	struct vfsops portal_vfsops;
4268661Smckusick extern	struct vfsops fdesc_vfsops;
4368661Smckusick extern	struct vfsops kernfs_vfsops;
4468661Smckusick 
4537488Smckusick /*
4637488Smckusick  * Set up the filesystem operations for vnodes.
4737488Smckusick  */
4868661Smckusick static struct vfsconf vfsconflist[] = {
4968661Smckusick 
5068661Smckusick 	/* Fast Filesystem */
5151519Sbostic #ifdef FFS
52*69377Smckusick 	{ &ufs_vfsops, "ufs", 1, 0, MNT_LOCAL, ffs_mountroot, NULL },
5351519Sbostic #endif
5437488Smckusick 
5568661Smckusick 	/* Log-based Filesystem */
5651456Sbostic #ifdef LFS
57*69377Smckusick 	{ &lfs_vfsops, "lfs", 5, 0, MNT_LOCAL, lfs_mountroot, NULL },
5837488Smckusick #endif
5937488Smckusick 
6068661Smckusick 	/* Memory-based Filesystem */
6139046Smckusick #ifdef MFS
62*69377Smckusick 	{ &mfs_vfsops, "mfs", 3, 0, MNT_LOCAL, mfs_mountroot, NULL },
6339046Smckusick #endif
6439046Smckusick 
6568661Smckusick 	/* ISO9660 (aka CDROM) Filesystem */
6668661Smckusick #ifdef CD9660
67*69377Smckusick 	{ &cd9660_vfsops, "cd9660", 14, 0, MNT_LOCAL, cd9660_mountroot, NULL },
6868661Smckusick #endif
6968661Smckusick 
7068661Smckusick 	/* MSDOS Filesystem */
7168661Smckusick #ifdef MSDOS
72*69377Smckusick 	{ &msdos_vfsops, "msdos", 4, 0, MNT_LOCAL, NULL, NULL },
7368661Smckusick #endif
7468661Smckusick 
7568661Smckusick 	/* AmigaDOS Filesystem */
7668661Smckusick #ifdef ADOSFS
77*69377Smckusick 	{ &adosfs_vfsops, "adosfs", 16, 0, MNT_LOCAL, NULL, NULL },
7868661Smckusick #endif
7968661Smckusick 
8068661Smckusick 	/* Sun-compatible Network Filesystem */
8151456Sbostic #ifdef NFS
82*69377Smckusick 	{ &nfs_vfsops, "nfs", 2, 0, 0, nfs_mountroot, NULL },
8351456Sbostic #endif
8451456Sbostic 
8568661Smckusick 	/* Andrew Filesystem */
8668661Smckusick #ifdef AFS
87*69377Smckusick 	{ &afs_vfsops, "andrewfs", 13, 0, 0, afs_mountroot, NULL },
8853827Spendry #endif
8953827Spendry 
9068661Smckusick 	/* /proc Filesystem */
9168661Smckusick #ifdef PROCFS
92*69377Smckusick 	{ &procfs_vfsops, "procfs", 12, 0, 0, NULL, NULL },
9353827Spendry #endif
9453827Spendry 
9568661Smckusick 	/* Loopback (Minimal) Filesystem Layer */
9654989Sheideman #ifdef NULLFS
97*69377Smckusick 	{ &null_vfsops, "loopback", 9, 0, 0, NULL, NULL },
9854989Sheideman #endif
9954989Sheideman 
10068661Smckusick 	/* Union (translucent) Filesystem */
10168661Smckusick #ifdef UNION
102*69377Smckusick 	{ &union_vfsops, "union", 15, 0, 0, NULL, NULL },
10354989Sheideman #endif
10454989Sheideman 
10568661Smckusick 	/* User/Group Identifer Remapping Filesystem */
10668661Smckusick #ifdef UMAPFS
107*69377Smckusick 	{ &umap_vfsops, "umap", 10, 0, 0, NULL, NULL },
10855336Spendry #endif
10954989Sheideman 
11068661Smckusick 	/* Portal Filesystem */
11168661Smckusick #ifdef PORTAL
112*69377Smckusick 	{ &portal_vfsops, "portal", 8, 0, 0, NULL, NULL },
11365147Spendry #endif
11455336Spendry 
11568661Smckusick 	/* File Descriptor Filesystem */
11668661Smckusick #ifdef FDESC
117*69377Smckusick 	{ &fdesc_vfsops, "fdesc", 7, 0, 0, NULL, NULL },
11865669Shibler #endif
11965669Shibler 
12068661Smckusick 	/* Kernel Information Filesystem */
12168661Smckusick #ifdef KERNFS
122*69377Smckusick 	{ &kernfs_vfsops, "kernfs", 11, 0, 0, NULL, NULL },
12365669Shibler #endif
12465669Shibler 
12537488Smckusick };
12653579Sheideman 
12768661Smckusick /*
12868661Smckusick  * Initially the size of the list, vfs_init will set maxvfsconf
12968661Smckusick  * to the highest defined type number.
13068661Smckusick  */
13168661Smckusick int maxvfsconf = sizeof(vfsconflist) / sizeof (struct vfsconf);
13268661Smckusick struct vfsconf *vfsconf = vfsconflist;
13353579Sheideman 
13453579Sheideman /*
13553579Sheideman  *
13654724Sbostic  * vfs_opv_descs enumerates the list of vnode classes, each with it's own
13754724Sbostic  * vnode operation vector.  It is consulted at system boot to build operation
13854724Sbostic  * vectors.  It is NULL terminated.
13953579Sheideman  *
14053579Sheideman  */
14153579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
14253579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc;
14353579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc;
14453579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
14553579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc;
14653579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc;
14753579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
14853579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc;
14953579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
15053579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc;
15153579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
15253579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
15353579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
15453943Spendry extern struct vnodeopv_desc fdesc_vnodeop_opv_desc;
15553943Spendry extern struct vnodeopv_desc portal_vnodeop_opv_desc;
15654989Sheideman extern struct vnodeopv_desc null_vnodeop_opv_desc;
15754989Sheideman extern struct vnodeopv_desc umap_vnodeop_opv_desc;
15855336Spendry extern struct vnodeopv_desc kernfs_vnodeop_opv_desc;
15965147Spendry extern struct vnodeopv_desc procfs_vnodeop_opv_desc;
16065899Shibler extern struct vnodeopv_desc cd9660_vnodeop_opv_desc;
16165899Shibler extern struct vnodeopv_desc cd9660_specop_opv_desc;
16265899Shibler extern struct vnodeopv_desc cd9660_fifoop_opv_desc;
16365937Spendry extern struct vnodeopv_desc union_vnodeop_opv_desc;
16453579Sheideman 
16553579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = {
16653579Sheideman 	&ffs_vnodeop_opv_desc,
16753579Sheideman 	&ffs_specop_opv_desc,
16854343Smckusick #ifdef FIFO
16953579Sheideman 	&ffs_fifoop_opv_desc,
17054343Smckusick #endif
17153760Smckusick 	&dead_vnodeop_opv_desc,
17254343Smckusick #ifdef FIFO
17353760Smckusick 	&fifo_vnodeop_opv_desc,
17454343Smckusick #endif
17553760Smckusick 	&spec_vnodeop_opv_desc,
17653760Smckusick #ifdef LFS
17753579Sheideman 	&lfs_vnodeop_opv_desc,
17853579Sheideman 	&lfs_specop_opv_desc,
17954343Smckusick #ifdef FIFO
18053579Sheideman 	&lfs_fifoop_opv_desc,
18153760Smckusick #endif
18254343Smckusick #endif
18353760Smckusick #ifdef MFS
18453579Sheideman 	&mfs_vnodeop_opv_desc,
18553760Smckusick #endif
18653760Smckusick #ifdef NFS
18753579Sheideman 	&nfsv2_vnodeop_opv_desc,
18853579Sheideman 	&spec_nfsv2nodeop_opv_desc,
18954343Smckusick #ifdef FIFO
19053579Sheideman 	&fifo_nfsv2nodeop_opv_desc,
19153760Smckusick #endif
19254343Smckusick #endif
19353943Spendry #ifdef FDESC
19453943Spendry 	&fdesc_vnodeop_opv_desc,
19553943Spendry #endif
19653943Spendry #ifdef PORTAL
19753943Spendry 	&portal_vnodeop_opv_desc,
19853943Spendry #endif
19954989Sheideman #ifdef NULLFS
20054989Sheideman 	&null_vnodeop_opv_desc,
20154989Sheideman #endif
20254989Sheideman #ifdef UMAPFS
20354989Sheideman 	&umap_vnodeop_opv_desc,
20454989Sheideman #endif
20555336Spendry #ifdef KERNFS
20655336Spendry 	&kernfs_vnodeop_opv_desc,
20755336Spendry #endif
20865147Spendry #ifdef PROCFS
20965147Spendry 	&procfs_vnodeop_opv_desc,
21065147Spendry #endif
21165897Shibler #ifdef CD9660
21265899Shibler 	&cd9660_vnodeop_opv_desc,
21365899Shibler 	&cd9660_specop_opv_desc,
21465669Shibler #ifdef FIFO
21565899Shibler 	&cd9660_fifoop_opv_desc,
21665669Shibler #endif
21765669Shibler #endif
21865937Spendry #ifdef UNION
21965937Spendry 	&union_vnodeop_opv_desc,
22065937Spendry #endif
22153579Sheideman 	NULL
22253579Sheideman };
223