xref: /csrg-svn/sys/kern/vfs_conf.c (revision 53579)
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.8 (Berkeley) 05/15/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 struct vfsops *vfssw[] = {
63 	NULL,			/* 0 = MOUNT_NONE */
64 	UFS_VFSOPS,		/* 1 = MOUNT_UFS */
65 	NFS_VFSOPS,		/* 2 = MOUNT_NFS */
66 	MFS_VFSOPS,		/* 3 = MOUNT_MFS */
67 	NULL,			/* 4 = MOUNT_PC */
68 	LFS_VFSOPS,		/* 5 = MOUNT_LFS */
69 };
70 
71 
72 /*
73  * Vnode_op_descs lists all vnode operations supported.
74  * At boot time vfs_op_init examines this list
75  * to configure vnode operations vectors.
76  */
77 
78 extern struct vnodeop_desc
79 	vop_lookup_desc,
80 	vop_create_desc,
81 	vop_mknod_desc,
82 	vop_open_desc,
83 	vop_close_desc,
84 	vop_access_desc,
85 	vop_getattr_desc,
86 	vop_setattr_desc,
87 	vop_read_desc,
88 	vop_write_desc,
89 	vop_ioctl_desc,
90 	vop_select_desc,
91 	vop_mmap_desc,
92 	vop_fsync_desc,
93 	vop_seek_desc,
94 	vop_remove_desc,
95 	vop_link_desc,
96 	vop_rename_desc,
97 	vop_mkdir_desc,
98 	vop_rmdir_desc,
99 	vop_symlink_desc,
100 	vop_readdir_desc,
101 	vop_readlink_desc,
102 	vop_abortop_desc,
103 	vop_inactive_desc,
104 	vop_reclaim_desc,
105 	vop_lock_desc,
106 	vop_unlock_desc,
107 	vop_bmap_desc,
108 	vop_strategy_desc,
109 	vop_print_desc,
110 	vop_islocked_desc,
111 	vop_advlock_desc,
112 	vop_blkatoff_desc,
113 	vop_vget_desc,
114 	vop_valloc_desc,
115 	vop_vfree_desc,
116 	vop_truncate_desc,
117 	vop_update_desc,
118 	vop_bwrite_desc,
119 /* and the default */
120 	vop_default_desc;
121 
122 struct vnodeop_desc *vfs_op_descs[] = {
123 	&vop_default_desc,   /* must be first */
124 	&vop_lookup_desc,
125 	&vop_create_desc,
126 	&vop_mknod_desc,
127 	&vop_open_desc,
128 	&vop_close_desc,
129 	&vop_access_desc,
130 	&vop_getattr_desc,
131 	&vop_setattr_desc,
132 	&vop_read_desc,
133 	&vop_write_desc,
134 	&vop_ioctl_desc,
135 	&vop_select_desc,
136 	&vop_mmap_desc,
137 	&vop_fsync_desc,
138 	&vop_seek_desc,
139 	&vop_remove_desc,
140 	&vop_link_desc,
141 	&vop_rename_desc,
142 	&vop_mkdir_desc,
143 	&vop_rmdir_desc,
144 	&vop_symlink_desc,
145 	&vop_readdir_desc,
146 	&vop_readlink_desc,
147 	&vop_abortop_desc,
148 	&vop_inactive_desc,
149 	&vop_reclaim_desc,
150 	&vop_lock_desc,
151 	&vop_unlock_desc,
152 	&vop_bmap_desc,
153 	&vop_strategy_desc,
154 	&vop_print_desc,
155 	&vop_islocked_desc,
156 	&vop_advlock_desc,
157 	&vop_blkatoff_desc,
158 	&vop_vget_desc,
159 	&vop_valloc_desc,
160 	&vop_vfree_desc,
161 	&vop_truncate_desc,
162 	&vop_update_desc,
163 	&vop_bwrite_desc,
164 	NULL
165 };
166 
167 
168 
169 
170 /*
171  *
172  * vfs_opv_descs enumerates the list of vnode classes,
173  * each with it's own vnode operation vector.
174  * It is consulted at system
175  * boot to build operation vectors.
176  * It's also null terminated.
177  *
178  * Out-of-kernel, someone else (more knowlegable about what file
179  * systems live in this address space) must specify this table.
180  */
181 
182 extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
183 extern struct vnodeopv_desc ffs_specop_opv_desc;
184 extern struct vnodeopv_desc ffs_fifoop_opv_desc;
185 extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
186 extern struct vnodeopv_desc lfs_specop_opv_desc;
187 extern struct vnodeopv_desc lfs_fifoop_opv_desc;
188 extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
189 extern struct vnodeopv_desc dead_vnodeop_opv_desc;
190 extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
191 extern struct vnodeopv_desc spec_vnodeop_opv_desc;
192 extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
193 extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
194 extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
195 
196 
197 struct vnodeopv_desc *vfs_opv_descs[] = {
198 	&ffs_vnodeop_opv_desc,
199 	&ffs_specop_opv_desc,
200 	&ffs_fifoop_opv_desc,
201 	&lfs_vnodeop_opv_desc,
202 	&lfs_specop_opv_desc,
203 	&lfs_fifoop_opv_desc,
204 	&mfs_vnodeop_opv_desc,
205 	&dead_vnodeop_opv_desc,
206 	&fifo_vnodeop_opv_desc,
207 	&spec_vnodeop_opv_desc,
208 	&nfsv2_vnodeop_opv_desc,
209 	&spec_nfsv2nodeop_opv_desc,
210 	&fifo_nfsv2nodeop_opv_desc,
211 	NULL
212 };
213 
214