xref: /original-bsd/sys/kern/vfs_conf.c (revision 3b6250d9)
1 /*
2  * Copyright (c) 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  *
7  *	@(#)vfs_conf.c	7.10 (Berkeley) 06/03/92
8  */
9 
10 #include <sys/param.h>
11 #include <sys/mount.h>
12 #include <sys/vnode.h>
13 
14 #ifdef FFS
15 #include <ufs/ffs/ffs_extern.h>
16 
17 /*
18  * This specifies the filesystem used to mount the root.
19  * This specification should be done by /etc/config.
20  */
21 int (*mountroot)() = ffs_mountroot;
22 #endif
23 
24 /*
25  * These define the root filesystem and device.
26  */
27 struct mount *rootfs;
28 struct vnode *rootdir;
29 
30 /*
31  * Set up the filesystem operations for vnodes.
32  * The types are defined in mount.h.
33  */
34 #ifdef FFS
35 extern	struct vfsops ufs_vfsops;
36 #define	UFS_VFSOPS	&ufs_vfsops
37 #else
38 #define	UFS_VFSOPS	NULL
39 #endif
40 
41 #ifdef LFS
42 extern	struct vfsops lfs_vfsops;
43 #define	LFS_VFSOPS	&lfs_vfsops
44 #else
45 #define	LFS_VFSOPS	NULL
46 #endif
47 
48 #ifdef MFS
49 extern	struct vfsops mfs_vfsops;
50 #define	MFS_VFSOPS	&mfs_vfsops
51 #else
52 #define	MFS_VFSOPS	NULL
53 #endif
54 
55 #ifdef NFS
56 extern	struct vfsops nfs_vfsops;
57 #define	NFS_VFSOPS	&nfs_vfsops
58 #else
59 #define	NFS_VFSOPS	NULL
60 #endif
61 
62 #ifdef LOFS
63 extern	struct vfsops lofs_vfsops;
64 #define	LOFS_VFSOPS	&lofs_vfsops
65 #else
66 #define	LOFS_VFSOPS	NULL
67 #endif
68 
69 #ifdef FDESC
70 extern	struct vfsops fdesc_vfsops;
71 #define	FDESC_VFSOPS	&fdesc_vfsops
72 #else
73 #define	FDESC_VFSOPS	NULL
74 #endif
75 
76 #ifdef PORTAL
77 extern	struct vfsops portal_vfsops;
78 #define	PORTAL_VFSOPS	&portal_vfsops
79 #else
80 #define	PORTAL_VFSOPS	NULL
81 #endif
82 
83 struct vfsops *vfssw[] = {
84 	NULL,			/* 0 = MOUNT_NONE */
85 	UFS_VFSOPS,		/* 1 = MOUNT_UFS */
86 	NFS_VFSOPS,		/* 2 = MOUNT_NFS */
87 	MFS_VFSOPS,		/* 3 = MOUNT_MFS */
88 	NULL,			/* 4 = MOUNT_PC */
89 	LFS_VFSOPS,		/* 5 = MOUNT_LFS */
90 	LOFS_VFSOPS,		/* 6 = MOUNT_LOFS */
91 	FDESC_VFSOPS,		/* 7 = MOUNT_FDESC */
92 	PORTAL_VFSOPS,		/* 8 = MOUNT_PORTAL */
93 };
94 
95 
96 /*
97  * Vnode_op_descs lists all vnode operations supported.
98  * At boot time vfs_op_init examines this list
99  * to configure vnode operations vectors.
100  */
101 
102 extern struct vnodeop_desc
103 	vop_lookup_desc,
104 	vop_create_desc,
105 	vop_mknod_desc,
106 	vop_open_desc,
107 	vop_close_desc,
108 	vop_access_desc,
109 	vop_getattr_desc,
110 	vop_setattr_desc,
111 	vop_read_desc,
112 	vop_write_desc,
113 	vop_ioctl_desc,
114 	vop_select_desc,
115 	vop_mmap_desc,
116 	vop_fsync_desc,
117 	vop_seek_desc,
118 	vop_remove_desc,
119 	vop_link_desc,
120 	vop_rename_desc,
121 	vop_mkdir_desc,
122 	vop_rmdir_desc,
123 	vop_symlink_desc,
124 	vop_readdir_desc,
125 	vop_readlink_desc,
126 	vop_abortop_desc,
127 	vop_inactive_desc,
128 	vop_reclaim_desc,
129 	vop_lock_desc,
130 	vop_unlock_desc,
131 	vop_bmap_desc,
132 	vop_strategy_desc,
133 	vop_print_desc,
134 	vop_islocked_desc,
135 	vop_advlock_desc,
136 	vop_blkatoff_desc,
137 	vop_vget_desc,
138 	vop_valloc_desc,
139 	vop_vfree_desc,
140 	vop_truncate_desc,
141 	vop_update_desc,
142 	vop_bwrite_desc,
143 /* and the default */
144 	vop_default_desc;
145 
146 struct vnodeop_desc *vfs_op_descs[] = {
147 	&vop_default_desc,   /* must be first */
148 	&vop_lookup_desc,
149 	&vop_create_desc,
150 	&vop_mknod_desc,
151 	&vop_open_desc,
152 	&vop_close_desc,
153 	&vop_access_desc,
154 	&vop_getattr_desc,
155 	&vop_setattr_desc,
156 	&vop_read_desc,
157 	&vop_write_desc,
158 	&vop_ioctl_desc,
159 	&vop_select_desc,
160 	&vop_mmap_desc,
161 	&vop_fsync_desc,
162 	&vop_seek_desc,
163 	&vop_remove_desc,
164 	&vop_link_desc,
165 	&vop_rename_desc,
166 	&vop_mkdir_desc,
167 	&vop_rmdir_desc,
168 	&vop_symlink_desc,
169 	&vop_readdir_desc,
170 	&vop_readlink_desc,
171 	&vop_abortop_desc,
172 	&vop_inactive_desc,
173 	&vop_reclaim_desc,
174 	&vop_lock_desc,
175 	&vop_unlock_desc,
176 	&vop_bmap_desc,
177 	&vop_strategy_desc,
178 	&vop_print_desc,
179 	&vop_islocked_desc,
180 	&vop_advlock_desc,
181 	&vop_blkatoff_desc,
182 	&vop_vget_desc,
183 	&vop_valloc_desc,
184 	&vop_vfree_desc,
185 	&vop_truncate_desc,
186 	&vop_update_desc,
187 	&vop_bwrite_desc,
188 	NULL
189 };
190 
191 
192 
193 
194 /*
195  *
196  * vfs_opv_descs enumerates the list of vnode classes,
197  * each with it's own vnode operation vector.
198  * It is consulted at system
199  * boot to build operation vectors.
200  * It's also null terminated.
201  *
202  * Out-of-kernel, someone else (more knowlegable about what file
203  * systems live in this address space) must specify this table.
204  */
205 
206 extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
207 extern struct vnodeopv_desc ffs_specop_opv_desc;
208 extern struct vnodeopv_desc ffs_fifoop_opv_desc;
209 extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
210 extern struct vnodeopv_desc lfs_specop_opv_desc;
211 extern struct vnodeopv_desc lfs_fifoop_opv_desc;
212 extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
213 extern struct vnodeopv_desc dead_vnodeop_opv_desc;
214 extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
215 extern struct vnodeopv_desc spec_vnodeop_opv_desc;
216 extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
217 extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
218 extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
219 
220 struct vnodeopv_desc *vfs_opv_descs[] = {
221 	&ffs_vnodeop_opv_desc,
222 	&ffs_specop_opv_desc,
223 	&ffs_fifoop_opv_desc,
224 	&dead_vnodeop_opv_desc,
225 	&fifo_vnodeop_opv_desc,
226 	&spec_vnodeop_opv_desc,
227 #ifdef LFS
228 	&lfs_vnodeop_opv_desc,
229 	&lfs_specop_opv_desc,
230 	&lfs_fifoop_opv_desc,
231 #endif
232 #ifdef MFS
233 	&mfs_vnodeop_opv_desc,
234 #endif
235 #ifdef NFS
236 	&nfsv2_vnodeop_opv_desc,
237 	&spec_nfsv2nodeop_opv_desc,
238 	&fifo_nfsv2nodeop_opv_desc,
239 #endif
240 	NULL
241 };
242