xref: /csrg-svn/sys/kern/vfs_conf.c (revision 54343)
137488Smckusick /*
237488Smckusick  * Copyright (c) 1989 The Regents of the University of California.
337488Smckusick  * All rights reserved.
437488Smckusick  *
544456Sbostic  * %sccs.include.redist.c%
637488Smckusick  *
7*54343Smckusick  *	@(#)vfs_conf.c	7.12 (Berkeley) 06/23/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 
6253827Spendry #ifdef LOFS
6353827Spendry extern	struct vfsops lofs_vfsops;
6453827Spendry #define	LOFS_VFSOPS	&lofs_vfsops
6553827Spendry #else
6653827Spendry #define	LOFS_VFSOPS	NULL
6753827Spendry #endif
6853827Spendry 
6953827Spendry #ifdef FDESC
7053827Spendry extern	struct vfsops fdesc_vfsops;
7153827Spendry #define	FDESC_VFSOPS	&fdesc_vfsops
7253827Spendry #else
7353827Spendry #define	FDESC_VFSOPS	NULL
7453827Spendry #endif
7553827Spendry 
7653827Spendry #ifdef PORTAL
7753827Spendry extern	struct vfsops portal_vfsops;
7853827Spendry #define	PORTAL_VFSOPS	&portal_vfsops
7953827Spendry #else
8053827Spendry #define	PORTAL_VFSOPS	NULL
8153827Spendry #endif
8253827Spendry 
8337488Smckusick struct vfsops *vfssw[] = {
8451456Sbostic 	NULL,			/* 0 = MOUNT_NONE */
8552414Storek 	UFS_VFSOPS,		/* 1 = MOUNT_UFS */
8652414Storek 	NFS_VFSOPS,		/* 2 = MOUNT_NFS */
8752414Storek 	MFS_VFSOPS,		/* 3 = MOUNT_MFS */
8851456Sbostic 	NULL,			/* 4 = MOUNT_PC */
8952414Storek 	LFS_VFSOPS,		/* 5 = MOUNT_LFS */
9053827Spendry 	LOFS_VFSOPS,		/* 6 = MOUNT_LOFS */
9153827Spendry 	FDESC_VFSOPS,		/* 7 = MOUNT_FDESC */
9253827Spendry 	PORTAL_VFSOPS,		/* 8 = MOUNT_PORTAL */
9337488Smckusick };
9453579Sheideman 
9553579Sheideman 
9653579Sheideman /*
9753579Sheideman  * Vnode_op_descs lists all vnode operations supported.
9853579Sheideman  * At boot time vfs_op_init examines this list
9953579Sheideman  * to configure vnode operations vectors.
10053579Sheideman  */
10153579Sheideman 
10253579Sheideman extern struct vnodeop_desc
10353579Sheideman 	vop_lookup_desc,
10453579Sheideman 	vop_create_desc,
10553579Sheideman 	vop_mknod_desc,
10653579Sheideman 	vop_open_desc,
10753579Sheideman 	vop_close_desc,
10853579Sheideman 	vop_access_desc,
10953579Sheideman 	vop_getattr_desc,
11053579Sheideman 	vop_setattr_desc,
11153579Sheideman 	vop_read_desc,
11253579Sheideman 	vop_write_desc,
11353579Sheideman 	vop_ioctl_desc,
11453579Sheideman 	vop_select_desc,
11553579Sheideman 	vop_mmap_desc,
11653579Sheideman 	vop_fsync_desc,
11753579Sheideman 	vop_seek_desc,
11853579Sheideman 	vop_remove_desc,
11953579Sheideman 	vop_link_desc,
12053579Sheideman 	vop_rename_desc,
12153579Sheideman 	vop_mkdir_desc,
12253579Sheideman 	vop_rmdir_desc,
12353579Sheideman 	vop_symlink_desc,
12453579Sheideman 	vop_readdir_desc,
12553579Sheideman 	vop_readlink_desc,
12653579Sheideman 	vop_abortop_desc,
12753579Sheideman 	vop_inactive_desc,
12853579Sheideman 	vop_reclaim_desc,
12953579Sheideman 	vop_lock_desc,
13053579Sheideman 	vop_unlock_desc,
13153579Sheideman 	vop_bmap_desc,
13253579Sheideman 	vop_strategy_desc,
13353579Sheideman 	vop_print_desc,
13453579Sheideman 	vop_islocked_desc,
13553579Sheideman 	vop_advlock_desc,
13653579Sheideman 	vop_blkatoff_desc,
13753579Sheideman 	vop_vget_desc,
13853579Sheideman 	vop_valloc_desc,
13953579Sheideman 	vop_vfree_desc,
14053579Sheideman 	vop_truncate_desc,
14153579Sheideman 	vop_update_desc,
14253579Sheideman 	vop_bwrite_desc,
14353579Sheideman /* and the default */
14453579Sheideman 	vop_default_desc;
14553579Sheideman 
14653579Sheideman struct vnodeop_desc *vfs_op_descs[] = {
14753579Sheideman 	&vop_default_desc,   /* must be first */
14853579Sheideman 	&vop_lookup_desc,
14953579Sheideman 	&vop_create_desc,
15053579Sheideman 	&vop_mknod_desc,
15153579Sheideman 	&vop_open_desc,
15253579Sheideman 	&vop_close_desc,
15353579Sheideman 	&vop_access_desc,
15453579Sheideman 	&vop_getattr_desc,
15553579Sheideman 	&vop_setattr_desc,
15653579Sheideman 	&vop_read_desc,
15753579Sheideman 	&vop_write_desc,
15853579Sheideman 	&vop_ioctl_desc,
15953579Sheideman 	&vop_select_desc,
16053579Sheideman 	&vop_mmap_desc,
16153579Sheideman 	&vop_fsync_desc,
16253579Sheideman 	&vop_seek_desc,
16353579Sheideman 	&vop_remove_desc,
16453579Sheideman 	&vop_link_desc,
16553579Sheideman 	&vop_rename_desc,
16653579Sheideman 	&vop_mkdir_desc,
16753579Sheideman 	&vop_rmdir_desc,
16853579Sheideman 	&vop_symlink_desc,
16953579Sheideman 	&vop_readdir_desc,
17053579Sheideman 	&vop_readlink_desc,
17153579Sheideman 	&vop_abortop_desc,
17253579Sheideman 	&vop_inactive_desc,
17353579Sheideman 	&vop_reclaim_desc,
17453579Sheideman 	&vop_lock_desc,
17553579Sheideman 	&vop_unlock_desc,
17653579Sheideman 	&vop_bmap_desc,
17753579Sheideman 	&vop_strategy_desc,
17853579Sheideman 	&vop_print_desc,
17953579Sheideman 	&vop_islocked_desc,
18053579Sheideman 	&vop_advlock_desc,
18153579Sheideman 	&vop_blkatoff_desc,
18253579Sheideman 	&vop_vget_desc,
18353579Sheideman 	&vop_valloc_desc,
18453579Sheideman 	&vop_vfree_desc,
18553579Sheideman 	&vop_truncate_desc,
18653579Sheideman 	&vop_update_desc,
18753579Sheideman 	&vop_bwrite_desc,
18853579Sheideman 	NULL
18953579Sheideman };
19053579Sheideman 
19153579Sheideman 
19253579Sheideman 
19353579Sheideman 
19453579Sheideman /*
19553579Sheideman  *
19653579Sheideman  * vfs_opv_descs enumerates the list of vnode classes,
19753579Sheideman  * each with it's own vnode operation vector.
19853579Sheideman  * It is consulted at system
19953579Sheideman  * boot to build operation vectors.
20053579Sheideman  * It's also null terminated.
20153579Sheideman  *
20253579Sheideman  * Out-of-kernel, someone else (more knowlegable about what file
20353579Sheideman  * systems live in this address space) must specify this table.
20453579Sheideman  */
20553579Sheideman 
20653579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
20753579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc;
20853579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc;
20953579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc;
21053579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc;
21153579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc;
21253579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
21353579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc;
21453579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
21553579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc;
21653579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
21753579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
21853579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
21953943Spendry extern struct vnodeopv_desc lofs_vnodeop_opv_desc;
22053943Spendry extern struct vnodeopv_desc fdesc_vnodeop_opv_desc;
22153943Spendry extern struct vnodeopv_desc portal_vnodeop_opv_desc;
22253579Sheideman 
22353579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = {
22453579Sheideman 	&ffs_vnodeop_opv_desc,
22553579Sheideman 	&ffs_specop_opv_desc,
226*54343Smckusick #ifdef FIFO
22753579Sheideman 	&ffs_fifoop_opv_desc,
228*54343Smckusick #endif
22953760Smckusick 	&dead_vnodeop_opv_desc,
230*54343Smckusick #ifdef FIFO
23153760Smckusick 	&fifo_vnodeop_opv_desc,
232*54343Smckusick #endif
23353760Smckusick 	&spec_vnodeop_opv_desc,
23453760Smckusick #ifdef LFS
23553579Sheideman 	&lfs_vnodeop_opv_desc,
23653579Sheideman 	&lfs_specop_opv_desc,
237*54343Smckusick #ifdef FIFO
23853579Sheideman 	&lfs_fifoop_opv_desc,
23953760Smckusick #endif
240*54343Smckusick #endif
24153760Smckusick #ifdef MFS
24253579Sheideman 	&mfs_vnodeop_opv_desc,
24353760Smckusick #endif
24453760Smckusick #ifdef NFS
24553579Sheideman 	&nfsv2_vnodeop_opv_desc,
24653579Sheideman 	&spec_nfsv2nodeop_opv_desc,
247*54343Smckusick #ifdef FIFO
24853579Sheideman 	&fifo_nfsv2nodeop_opv_desc,
24953760Smckusick #endif
250*54343Smckusick #endif
25153943Spendry #ifdef LOFS
25253943Spendry 	&lofs_vnodeop_opv_desc,
25353943Spendry #endif
25453943Spendry #ifdef FDESC
25553943Spendry 	&fdesc_vnodeop_opv_desc,
25653943Spendry #endif
25753943Spendry #ifdef PORTAL
25853943Spendry 	&portal_vnodeop_opv_desc,
25953943Spendry #endif
26053579Sheideman 	NULL
26153579Sheideman };
262