xref: /csrg-svn/sys/kern/vfs_conf.c (revision 68661)
137488Smckusick /*
2*68661Smckusick  * Copyright (c) 1989, 1993, 1995
363180Sbostic  *	The Regents of the University of California.  All rights reserved.
437488Smckusick  *
544456Sbostic  * %sccs.include.redist.c%
637488Smckusick  *
7*68661Smckusick  *	@(#)vfs_conf.c	8.10 (Berkeley) 03/30/95
837488Smckusick  */
937488Smckusick 
1051456Sbostic #include <sys/param.h>
1151456Sbostic #include <sys/mount.h>
1253494Sheideman #include <sys/vnode.h>
1351519Sbostic 
1451519Sbostic #ifdef FFS
1568561Smckusick #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 
31*68661Smckusick extern	struct vfsops ufs_vfsops;
32*68661Smckusick extern	struct vfsops lfs_vfsops;
33*68661Smckusick extern	struct vfsops mfs_vfsops;
34*68661Smckusick extern	struct vfsops cd9660_vfsops;
35*68661Smckusick extern	struct vfsops msdos_vfsops;
36*68661Smckusick extern	struct vfsops adosfs_vfsops;
37*68661Smckusick extern	struct vfsops nfs_vfsops;
38*68661Smckusick extern	struct vfsops afs_vfsops;
39*68661Smckusick extern	struct vfsops procfs_vfsops;
40*68661Smckusick extern	struct vfsops null_vfsops;
41*68661Smckusick extern	struct vfsops union_vfsops;
42*68661Smckusick extern	struct vfsops umap_vfsops;
43*68661Smckusick extern	struct vfsops portal_vfsops;
44*68661Smckusick extern	struct vfsops fdesc_vfsops;
45*68661Smckusick extern	struct vfsops kernfs_vfsops;
46*68661Smckusick 
4737488Smckusick /*
4837488Smckusick  * Set up the filesystem operations for vnodes.
4937488Smckusick  */
50*68661Smckusick static struct vfsconf vfsconflist[] = {
51*68661Smckusick 
52*68661Smckusick 	/* Fast Filesystem */
5351519Sbostic #ifdef FFS
54*68661Smckusick 	{ &ufs_vfsops, "ufs", 1, 0, MNT_LOCAL, NULL },
5551519Sbostic #endif
5637488Smckusick 
57*68661Smckusick 	/* Log-based Filesystem */
5851456Sbostic #ifdef LFS
59*68661Smckusick 	{ &lfs_vfsops, "lfs", 5, 0, MNT_LOCAL, NULL },
6037488Smckusick #endif
6137488Smckusick 
62*68661Smckusick 	/* Memory-based Filesystem */
6339046Smckusick #ifdef MFS
64*68661Smckusick 	{ &mfs_vfsops, "mfs", 3, 0, MNT_LOCAL, NULL },
6539046Smckusick #endif
6639046Smckusick 
67*68661Smckusick 	/* ISO9660 (aka CDROM) Filesystem */
68*68661Smckusick #ifdef CD9660
69*68661Smckusick 	{ &cd9660_vfsops, "cd9660", 14, 0, MNT_LOCAL, NULL },
70*68661Smckusick #endif
71*68661Smckusick 
72*68661Smckusick 	/* MSDOS Filesystem */
73*68661Smckusick #ifdef MSDOS
74*68661Smckusick 	{ &msdos_vfsops, "msdos", 4, 0, MNT_LOCAL, NULL },
75*68661Smckusick #endif
76*68661Smckusick 
77*68661Smckusick 	/* AmigaDOS Filesystem */
78*68661Smckusick #ifdef ADOSFS
79*68661Smckusick 	{ &adosfs_vfsops, "adosfs", 16, 0, MNT_LOCAL, NULL },
80*68661Smckusick #endif
81*68661Smckusick 
82*68661Smckusick 	/* Sun-compatible Network Filesystem */
8351456Sbostic #ifdef NFS
84*68661Smckusick 	{ &nfs_vfsops, "nfs", 2, 0, 0, NULL },
8551456Sbostic #endif
8651456Sbostic 
87*68661Smckusick 	/* Andrew Filesystem */
88*68661Smckusick #ifdef AFS
89*68661Smckusick 	{ &afs_vfsops, "andrewfs", 13, 0, 0, NULL },
9053827Spendry #endif
9153827Spendry 
92*68661Smckusick 	/* /proc Filesystem */
93*68661Smckusick #ifdef PROCFS
94*68661Smckusick 	{ &procfs_vfsops, "procfs", 12, 0, 0, NULL },
9553827Spendry #endif
9653827Spendry 
97*68661Smckusick 	/* Loopback (Minimal) Filesystem Layer */
9854989Sheideman #ifdef NULLFS
99*68661Smckusick 	{ &null_vfsops, "loopback", 9, 0, 0, NULL },
10054989Sheideman #endif
10154989Sheideman 
102*68661Smckusick 	/* Union (translucent) Filesystem */
103*68661Smckusick #ifdef UNION
104*68661Smckusick 	{ &union_vfsops, "union", 15, 0, 0, NULL },
10554989Sheideman #endif
10654989Sheideman 
107*68661Smckusick 	/* User/Group Identifer Remapping Filesystem */
108*68661Smckusick #ifdef UMAPFS
109*68661Smckusick 	{ &umap_vfsops, "umap", 10, 0, 0, NULL },
11055336Spendry #endif
11154989Sheideman 
112*68661Smckusick 	/* Portal Filesystem */
113*68661Smckusick #ifdef PORTAL
114*68661Smckusick 	{ &portal_vfsops, "portal", 8, 0, 0, NULL },
11565147Spendry #endif
11655336Spendry 
117*68661Smckusick 	/* File Descriptor Filesystem */
118*68661Smckusick #ifdef FDESC
119*68661Smckusick 	{ &fdesc_vfsops, "fdesc", 7, 0, 0, NULL },
12065669Shibler #endif
12165669Shibler 
122*68661Smckusick 	/* Kernel Information Filesystem */
123*68661Smckusick #ifdef KERNFS
124*68661Smckusick 	{ &kernfs_vfsops, "kernfs", 11, 0, 0, NULL },
12565669Shibler #endif
12665669Shibler 
12737488Smckusick };
12853579Sheideman 
129*68661Smckusick /*
130*68661Smckusick  * Initially the size of the list, vfs_init will set maxvfsconf
131*68661Smckusick  * to the highest defined type number.
132*68661Smckusick  */
133*68661Smckusick int maxvfsconf = sizeof(vfsconflist) / sizeof (struct vfsconf);
134*68661Smckusick struct vfsconf *vfsconf = vfsconflist;
13553579Sheideman 
13653579Sheideman /*
13753579Sheideman  *
13854724Sbostic  * vfs_opv_descs enumerates the list of vnode classes, each with it's own
13954724Sbostic  * vnode operation vector.  It is consulted at system boot to build operation
14054724Sbostic  * vectors.  It is NULL terminated.
14153579Sheideman  *
14253579Sheideman  */
14353579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
14453579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc;
14553579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc;
14653579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
14753579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc;
14853579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc;
14953579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
15053579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc;
15153579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
15253579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc;
15353579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
15453579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
15553579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
15653943Spendry extern struct vnodeopv_desc fdesc_vnodeop_opv_desc;
15753943Spendry extern struct vnodeopv_desc portal_vnodeop_opv_desc;
15854989Sheideman extern struct vnodeopv_desc null_vnodeop_opv_desc;
15954989Sheideman extern struct vnodeopv_desc umap_vnodeop_opv_desc;
16055336Spendry extern struct vnodeopv_desc kernfs_vnodeop_opv_desc;
16165147Spendry extern struct vnodeopv_desc procfs_vnodeop_opv_desc;
16265899Shibler extern struct vnodeopv_desc cd9660_vnodeop_opv_desc;
16365899Shibler extern struct vnodeopv_desc cd9660_specop_opv_desc;
16465899Shibler extern struct vnodeopv_desc cd9660_fifoop_opv_desc;
16565937Spendry extern struct vnodeopv_desc union_vnodeop_opv_desc;
16653579Sheideman 
16753579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = {
16853579Sheideman 	&ffs_vnodeop_opv_desc,
16953579Sheideman 	&ffs_specop_opv_desc,
17054343Smckusick #ifdef FIFO
17153579Sheideman 	&ffs_fifoop_opv_desc,
17254343Smckusick #endif
17353760Smckusick 	&dead_vnodeop_opv_desc,
17454343Smckusick #ifdef FIFO
17553760Smckusick 	&fifo_vnodeop_opv_desc,
17654343Smckusick #endif
17753760Smckusick 	&spec_vnodeop_opv_desc,
17853760Smckusick #ifdef LFS
17953579Sheideman 	&lfs_vnodeop_opv_desc,
18053579Sheideman 	&lfs_specop_opv_desc,
18154343Smckusick #ifdef FIFO
18253579Sheideman 	&lfs_fifoop_opv_desc,
18353760Smckusick #endif
18454343Smckusick #endif
18553760Smckusick #ifdef MFS
18653579Sheideman 	&mfs_vnodeop_opv_desc,
18753760Smckusick #endif
18853760Smckusick #ifdef NFS
18953579Sheideman 	&nfsv2_vnodeop_opv_desc,
19053579Sheideman 	&spec_nfsv2nodeop_opv_desc,
19154343Smckusick #ifdef FIFO
19253579Sheideman 	&fifo_nfsv2nodeop_opv_desc,
19353760Smckusick #endif
19454343Smckusick #endif
19553943Spendry #ifdef FDESC
19653943Spendry 	&fdesc_vnodeop_opv_desc,
19753943Spendry #endif
19853943Spendry #ifdef PORTAL
19953943Spendry 	&portal_vnodeop_opv_desc,
20053943Spendry #endif
20154989Sheideman #ifdef NULLFS
20254989Sheideman 	&null_vnodeop_opv_desc,
20354989Sheideman #endif
20454989Sheideman #ifdef UMAPFS
20554989Sheideman 	&umap_vnodeop_opv_desc,
20654989Sheideman #endif
20755336Spendry #ifdef KERNFS
20855336Spendry 	&kernfs_vnodeop_opv_desc,
20955336Spendry #endif
21065147Spendry #ifdef PROCFS
21165147Spendry 	&procfs_vnodeop_opv_desc,
21265147Spendry #endif
21365897Shibler #ifdef CD9660
21465899Shibler 	&cd9660_vnodeop_opv_desc,
21565899Shibler 	&cd9660_specop_opv_desc,
21665669Shibler #ifdef FIFO
21765899Shibler 	&cd9660_fifoop_opv_desc,
21865669Shibler #endif
21965669Shibler #endif
22065937Spendry #ifdef UNION
22165937Spendry 	&union_vnodeop_opv_desc,
22265937Spendry #endif
22353579Sheideman 	NULL
22453579Sheideman };
225