xref: /csrg-svn/sys/kern/vfs_conf.c (revision 53579)
137488Smckusick /*
237488Smckusick  * Copyright (c) 1989 The Regents of the University of California.
337488Smckusick  * All rights reserved.
437488Smckusick  *
544456Sbostic  * %sccs.include.redist.c%
637488Smckusick  *
7*53579Sheideman  *	@(#)vfs_conf.c	7.8 (Berkeley) 05/15/92
837488Smckusick  */
937488Smckusick 
1051456Sbostic #include <sys/param.h>
1151456Sbostic #include <sys/mount.h>
1253494Sheideman #include <sys/vnode.h>
1351519Sbostic 
1451519Sbostic #ifdef FFS
1551456Sbostic #include <ufs/ffs/ffs_extern.h>
1637488Smckusick 
1737488Smckusick /*
1837488Smckusick  * This specifies the filesystem used to mount the root.
1937488Smckusick  * This specification should be done by /etc/config.
2037488Smckusick  */
2151456Sbostic int (*mountroot)() = ffs_mountroot;
2251519Sbostic #endif
2337488Smckusick 
2437488Smckusick /*
2537488Smckusick  * These define the root filesystem and device.
2637488Smckusick  */
2737488Smckusick struct mount *rootfs;
2837488Smckusick struct vnode *rootdir;
2937488Smckusick 
3037488Smckusick /*
3137488Smckusick  * Set up the filesystem operations for vnodes.
3237488Smckusick  * The types are defined in mount.h.
3337488Smckusick  */
3451519Sbostic #ifdef FFS
3537488Smckusick extern	struct vfsops ufs_vfsops;
3652414Storek #define	UFS_VFSOPS	&ufs_vfsops
3752414Storek #else
3852414Storek #define	UFS_VFSOPS	NULL
3951519Sbostic #endif
4037488Smckusick 
4151456Sbostic #ifdef LFS
4251456Sbostic extern	struct vfsops lfs_vfsops;
4352414Storek #define	LFS_VFSOPS	&lfs_vfsops
4452414Storek #else
4552414Storek #define	LFS_VFSOPS	NULL
4637488Smckusick #endif
4737488Smckusick 
4839046Smckusick #ifdef MFS
4939046Smckusick extern	struct vfsops mfs_vfsops;
5052414Storek #define	MFS_VFSOPS	&mfs_vfsops
5152414Storek #else
5252414Storek #define	MFS_VFSOPS	NULL
5339046Smckusick #endif
5439046Smckusick 
5551456Sbostic #ifdef NFS
5651456Sbostic extern	struct vfsops nfs_vfsops;
5752414Storek #define	NFS_VFSOPS	&nfs_vfsops
5852414Storek #else
5952414Storek #define	NFS_VFSOPS	NULL
6051456Sbostic #endif
6151456Sbostic 
6237488Smckusick struct vfsops *vfssw[] = {
6351456Sbostic 	NULL,			/* 0 = MOUNT_NONE */
6452414Storek 	UFS_VFSOPS,		/* 1 = MOUNT_UFS */
6552414Storek 	NFS_VFSOPS,		/* 2 = MOUNT_NFS */
6652414Storek 	MFS_VFSOPS,		/* 3 = MOUNT_MFS */
6751456Sbostic 	NULL,			/* 4 = MOUNT_PC */
6852414Storek 	LFS_VFSOPS,		/* 5 = MOUNT_LFS */
6937488Smckusick };
70*53579Sheideman 
71*53579Sheideman 
72*53579Sheideman /*
73*53579Sheideman  * Vnode_op_descs lists all vnode operations supported.
74*53579Sheideman  * At boot time vfs_op_init examines this list
75*53579Sheideman  * to configure vnode operations vectors.
76*53579Sheideman  */
77*53579Sheideman 
78*53579Sheideman extern struct vnodeop_desc
79*53579Sheideman 	vop_lookup_desc,
80*53579Sheideman 	vop_create_desc,
81*53579Sheideman 	vop_mknod_desc,
82*53579Sheideman 	vop_open_desc,
83*53579Sheideman 	vop_close_desc,
84*53579Sheideman 	vop_access_desc,
85*53579Sheideman 	vop_getattr_desc,
86*53579Sheideman 	vop_setattr_desc,
87*53579Sheideman 	vop_read_desc,
88*53579Sheideman 	vop_write_desc,
89*53579Sheideman 	vop_ioctl_desc,
90*53579Sheideman 	vop_select_desc,
91*53579Sheideman 	vop_mmap_desc,
92*53579Sheideman 	vop_fsync_desc,
93*53579Sheideman 	vop_seek_desc,
94*53579Sheideman 	vop_remove_desc,
95*53579Sheideman 	vop_link_desc,
96*53579Sheideman 	vop_rename_desc,
97*53579Sheideman 	vop_mkdir_desc,
98*53579Sheideman 	vop_rmdir_desc,
99*53579Sheideman 	vop_symlink_desc,
100*53579Sheideman 	vop_readdir_desc,
101*53579Sheideman 	vop_readlink_desc,
102*53579Sheideman 	vop_abortop_desc,
103*53579Sheideman 	vop_inactive_desc,
104*53579Sheideman 	vop_reclaim_desc,
105*53579Sheideman 	vop_lock_desc,
106*53579Sheideman 	vop_unlock_desc,
107*53579Sheideman 	vop_bmap_desc,
108*53579Sheideman 	vop_strategy_desc,
109*53579Sheideman 	vop_print_desc,
110*53579Sheideman 	vop_islocked_desc,
111*53579Sheideman 	vop_advlock_desc,
112*53579Sheideman 	vop_blkatoff_desc,
113*53579Sheideman 	vop_vget_desc,
114*53579Sheideman 	vop_valloc_desc,
115*53579Sheideman 	vop_vfree_desc,
116*53579Sheideman 	vop_truncate_desc,
117*53579Sheideman 	vop_update_desc,
118*53579Sheideman 	vop_bwrite_desc,
119*53579Sheideman /* and the default */
120*53579Sheideman 	vop_default_desc;
121*53579Sheideman 
122*53579Sheideman struct vnodeop_desc *vfs_op_descs[] = {
123*53579Sheideman 	&vop_default_desc,   /* must be first */
124*53579Sheideman 	&vop_lookup_desc,
125*53579Sheideman 	&vop_create_desc,
126*53579Sheideman 	&vop_mknod_desc,
127*53579Sheideman 	&vop_open_desc,
128*53579Sheideman 	&vop_close_desc,
129*53579Sheideman 	&vop_access_desc,
130*53579Sheideman 	&vop_getattr_desc,
131*53579Sheideman 	&vop_setattr_desc,
132*53579Sheideman 	&vop_read_desc,
133*53579Sheideman 	&vop_write_desc,
134*53579Sheideman 	&vop_ioctl_desc,
135*53579Sheideman 	&vop_select_desc,
136*53579Sheideman 	&vop_mmap_desc,
137*53579Sheideman 	&vop_fsync_desc,
138*53579Sheideman 	&vop_seek_desc,
139*53579Sheideman 	&vop_remove_desc,
140*53579Sheideman 	&vop_link_desc,
141*53579Sheideman 	&vop_rename_desc,
142*53579Sheideman 	&vop_mkdir_desc,
143*53579Sheideman 	&vop_rmdir_desc,
144*53579Sheideman 	&vop_symlink_desc,
145*53579Sheideman 	&vop_readdir_desc,
146*53579Sheideman 	&vop_readlink_desc,
147*53579Sheideman 	&vop_abortop_desc,
148*53579Sheideman 	&vop_inactive_desc,
149*53579Sheideman 	&vop_reclaim_desc,
150*53579Sheideman 	&vop_lock_desc,
151*53579Sheideman 	&vop_unlock_desc,
152*53579Sheideman 	&vop_bmap_desc,
153*53579Sheideman 	&vop_strategy_desc,
154*53579Sheideman 	&vop_print_desc,
155*53579Sheideman 	&vop_islocked_desc,
156*53579Sheideman 	&vop_advlock_desc,
157*53579Sheideman 	&vop_blkatoff_desc,
158*53579Sheideman 	&vop_vget_desc,
159*53579Sheideman 	&vop_valloc_desc,
160*53579Sheideman 	&vop_vfree_desc,
161*53579Sheideman 	&vop_truncate_desc,
162*53579Sheideman 	&vop_update_desc,
163*53579Sheideman 	&vop_bwrite_desc,
164*53579Sheideman 	NULL
165*53579Sheideman };
166*53579Sheideman 
167*53579Sheideman 
168*53579Sheideman 
169*53579Sheideman 
170*53579Sheideman /*
171*53579Sheideman  *
172*53579Sheideman  * vfs_opv_descs enumerates the list of vnode classes,
173*53579Sheideman  * each with it's own vnode operation vector.
174*53579Sheideman  * It is consulted at system
175*53579Sheideman  * boot to build operation vectors.
176*53579Sheideman  * It's also null terminated.
177*53579Sheideman  *
178*53579Sheideman  * Out-of-kernel, someone else (more knowlegable about what file
179*53579Sheideman  * systems live in this address space) must specify this table.
180*53579Sheideman  */
181*53579Sheideman 
182*53579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
183*53579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc;
184*53579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc;
185*53579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
186*53579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc;
187*53579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc;
188*53579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
189*53579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc;
190*53579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
191*53579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc;
192*53579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
193*53579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
194*53579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
195*53579Sheideman 
196*53579Sheideman 
197*53579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = {
198*53579Sheideman 	&ffs_vnodeop_opv_desc,
199*53579Sheideman 	&ffs_specop_opv_desc,
200*53579Sheideman 	&ffs_fifoop_opv_desc,
201*53579Sheideman 	&lfs_vnodeop_opv_desc,
202*53579Sheideman 	&lfs_specop_opv_desc,
203*53579Sheideman 	&lfs_fifoop_opv_desc,
204*53579Sheideman 	&mfs_vnodeop_opv_desc,
205*53579Sheideman 	&dead_vnodeop_opv_desc,
206*53579Sheideman 	&fifo_vnodeop_opv_desc,
207*53579Sheideman 	&spec_vnodeop_opv_desc,
208*53579Sheideman 	&nfsv2_vnodeop_opv_desc,
209*53579Sheideman 	&spec_nfsv2nodeop_opv_desc,
210*53579Sheideman 	&fifo_nfsv2nodeop_opv_desc,
211*53579Sheideman 	NULL
212*53579Sheideman };
213*53579Sheideman 
214