xref: /original-bsd/sys/kern/vfs_conf.c (revision fac0c393)
1 /*
2  * Copyright (c) 1989, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)vfs_conf.c	8.9 (Berkeley) 03/21/95
8  */
9 
10 #include <sys/param.h>
11 #include <sys/mount.h>
12 #include <sys/vnode.h>
13 
14 #ifdef FFS
15 #include <ufs/ufs/dinode.h>
16 #include <ufs/ffs/ffs_extern.h>
17 
18 /*
19  * This specifies the filesystem used to mount the root.
20  * This specification should be done by /etc/config.
21  */
22 int (*mountroot)() = ffs_mountroot;
23 #endif
24 
25 /*
26  * These define the root filesystem and device.
27  */
28 struct mount *rootfs;
29 struct vnode *rootvnode;
30 
31 /*
32  * Set up the filesystem operations for vnodes.
33  * The types are defined in mount.h.
34  */
35 #ifdef FFS
36 extern	struct vfsops ufs_vfsops;
37 #define	UFS_VFSOPS	&ufs_vfsops
38 #else
39 #define	UFS_VFSOPS	NULL
40 #endif
41 
42 #ifdef LFS
43 extern	struct vfsops lfs_vfsops;
44 #define	LFS_VFSOPS	&lfs_vfsops
45 #else
46 #define	LFS_VFSOPS	NULL
47 #endif
48 
49 #ifdef MFS
50 extern	struct vfsops mfs_vfsops;
51 #define	MFS_VFSOPS	&mfs_vfsops
52 #else
53 #define	MFS_VFSOPS	NULL
54 #endif
55 
56 #ifdef NFS
57 extern	struct vfsops nfs_vfsops;
58 #define	NFS_VFSOPS	&nfs_vfsops
59 #else
60 #define	NFS_VFSOPS	NULL
61 #endif
62 
63 #ifdef FDESC
64 extern	struct vfsops fdesc_vfsops;
65 #define	FDESC_VFSOPS	&fdesc_vfsops
66 #else
67 #define	FDESC_VFSOPS	NULL
68 #endif
69 
70 #ifdef PORTAL
71 extern	struct vfsops portal_vfsops;
72 #define	PORTAL_VFSOPS	&portal_vfsops
73 #else
74 #define	PORTAL_VFSOPS	NULL
75 #endif
76 
77 #ifdef NULLFS
78 extern	struct vfsops null_vfsops;
79 #define NULL_VFSOPS	&null_vfsops
80 #else
81 #define NULL_VFSOPS	NULL
82 #endif
83 
84 #ifdef UMAPFS
85 extern	struct vfsops umap_vfsops;
86 #define UMAP_VFSOPS	&umap_vfsops
87 #else
88 #define UMAP_VFSOPS	NULL
89 #endif
90 
91 #ifdef KERNFS
92 extern	struct vfsops kernfs_vfsops;
93 #define KERNFS_VFSOPS	&kernfs_vfsops
94 #else
95 #define KERNFS_VFSOPS	NULL
96 #endif
97 
98 #ifdef PROCFS
99 extern	struct vfsops procfs_vfsops;
100 #define PROCFS_VFSOPS	&procfs_vfsops
101 #else
102 #define PROCFS_VFSOPS	NULL
103 #endif
104 
105 #ifdef AFS
106 extern	struct vfsops afs_vfsops;
107 #define AFS_VFSOPS	&afs_vfsops
108 #else
109 #define AFS_VFSOPS	NULL
110 #endif
111 
112 #ifdef CD9660
113 extern	struct vfsops cd9660_vfsops;
114 #define CD9660_VFSOPS	&cd9660_vfsops
115 #else
116 #define CD9660_VFSOPS	NULL
117 #endif
118 
119 #ifdef UNION
120 extern	struct vfsops union_vfsops;
121 #define	UNION_VFSOPS	&union_vfsops
122 #else
123 #define	UNION_VFSOPS	NULL
124 #endif
125 
126 struct vfsops *vfssw[] = {
127 	NULL,			/* 0 = MOUNT_NONE */
128 	UFS_VFSOPS,		/* 1 = MOUNT_UFS */
129 	NFS_VFSOPS,		/* 2 = MOUNT_NFS */
130 	MFS_VFSOPS,		/* 3 = MOUNT_MFS */
131 	NULL,			/* 4 = MOUNT_PC */
132 	LFS_VFSOPS,		/* 5 = MOUNT_LFS */
133 	NULL,			/* 6 = MOUNT_LOFS */
134 	FDESC_VFSOPS,		/* 7 = MOUNT_FDESC */
135 	PORTAL_VFSOPS,		/* 8 = MOUNT_PORTAL */
136 	NULL_VFSOPS,		/* 9 = MOUNT_NULL */
137 	UMAP_VFSOPS,		/* 10 = MOUNT_UMAP */
138 	KERNFS_VFSOPS,		/* 11 = MOUNT_KERNFS */
139 	PROCFS_VFSOPS,		/* 12 = MOUNT_PROCFS */
140 	AFS_VFSOPS,		/* 13 = MOUNT_AFS */
141 	CD9660_VFSOPS,		/* 14 = MOUNT_CD9660 */
142 	UNION_VFSOPS,		/* 15 = MOUNT_UNION */
143 	0
144 };
145 
146 
147 /*
148  *
149  * vfs_opv_descs enumerates the list of vnode classes, each with it's own
150  * vnode operation vector.  It is consulted at system boot to build operation
151  * vectors.  It is NULL terminated.
152  *
153  */
154 extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
155 extern struct vnodeopv_desc ffs_specop_opv_desc;
156 extern struct vnodeopv_desc ffs_fifoop_opv_desc;
157 extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
158 extern struct vnodeopv_desc lfs_specop_opv_desc;
159 extern struct vnodeopv_desc lfs_fifoop_opv_desc;
160 extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
161 extern struct vnodeopv_desc dead_vnodeop_opv_desc;
162 extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
163 extern struct vnodeopv_desc spec_vnodeop_opv_desc;
164 extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
165 extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
166 extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
167 extern struct vnodeopv_desc fdesc_vnodeop_opv_desc;
168 extern struct vnodeopv_desc portal_vnodeop_opv_desc;
169 extern struct vnodeopv_desc null_vnodeop_opv_desc;
170 extern struct vnodeopv_desc umap_vnodeop_opv_desc;
171 extern struct vnodeopv_desc kernfs_vnodeop_opv_desc;
172 extern struct vnodeopv_desc procfs_vnodeop_opv_desc;
173 extern struct vnodeopv_desc cd9660_vnodeop_opv_desc;
174 extern struct vnodeopv_desc cd9660_specop_opv_desc;
175 extern struct vnodeopv_desc cd9660_fifoop_opv_desc;
176 extern struct vnodeopv_desc union_vnodeop_opv_desc;
177 
178 struct vnodeopv_desc *vfs_opv_descs[] = {
179 	&ffs_vnodeop_opv_desc,
180 	&ffs_specop_opv_desc,
181 #ifdef FIFO
182 	&ffs_fifoop_opv_desc,
183 #endif
184 	&dead_vnodeop_opv_desc,
185 #ifdef FIFO
186 	&fifo_vnodeop_opv_desc,
187 #endif
188 	&spec_vnodeop_opv_desc,
189 #ifdef LFS
190 	&lfs_vnodeop_opv_desc,
191 	&lfs_specop_opv_desc,
192 #ifdef FIFO
193 	&lfs_fifoop_opv_desc,
194 #endif
195 #endif
196 #ifdef MFS
197 	&mfs_vnodeop_opv_desc,
198 #endif
199 #ifdef NFS
200 	&nfsv2_vnodeop_opv_desc,
201 	&spec_nfsv2nodeop_opv_desc,
202 #ifdef FIFO
203 	&fifo_nfsv2nodeop_opv_desc,
204 #endif
205 #endif
206 #ifdef FDESC
207 	&fdesc_vnodeop_opv_desc,
208 #endif
209 #ifdef PORTAL
210 	&portal_vnodeop_opv_desc,
211 #endif
212 #ifdef NULLFS
213 	&null_vnodeop_opv_desc,
214 #endif
215 #ifdef UMAPFS
216 	&umap_vnodeop_opv_desc,
217 #endif
218 #ifdef KERNFS
219 	&kernfs_vnodeop_opv_desc,
220 #endif
221 #ifdef PROCFS
222 	&procfs_vnodeop_opv_desc,
223 #endif
224 #ifdef CD9660
225 	&cd9660_vnodeop_opv_desc,
226 	&cd9660_specop_opv_desc,
227 #ifdef FIFO
228 	&cd9660_fifoop_opv_desc,
229 #endif
230 #endif
231 #ifdef UNION
232 	&union_vnodeop_opv_desc,
233 #endif
234 	NULL
235 };
236