137488Smckusick /* 237488Smckusick * Copyright (c) 1989 The Regents of the University of California. 337488Smckusick * All rights reserved. 437488Smckusick * 544456Sbostic * %sccs.include.redist.c% 637488Smckusick * 7*53760Smckusick * @(#)vfs_conf.c 7.9 (Berkeley) 05/31/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 }; 7053579Sheideman 7153579Sheideman 7253579Sheideman /* 7353579Sheideman * Vnode_op_descs lists all vnode operations supported. 7453579Sheideman * At boot time vfs_op_init examines this list 7553579Sheideman * to configure vnode operations vectors. 7653579Sheideman */ 7753579Sheideman 7853579Sheideman extern struct vnodeop_desc 7953579Sheideman vop_lookup_desc, 8053579Sheideman vop_create_desc, 8153579Sheideman vop_mknod_desc, 8253579Sheideman vop_open_desc, 8353579Sheideman vop_close_desc, 8453579Sheideman vop_access_desc, 8553579Sheideman vop_getattr_desc, 8653579Sheideman vop_setattr_desc, 8753579Sheideman vop_read_desc, 8853579Sheideman vop_write_desc, 8953579Sheideman vop_ioctl_desc, 9053579Sheideman vop_select_desc, 9153579Sheideman vop_mmap_desc, 9253579Sheideman vop_fsync_desc, 9353579Sheideman vop_seek_desc, 9453579Sheideman vop_remove_desc, 9553579Sheideman vop_link_desc, 9653579Sheideman vop_rename_desc, 9753579Sheideman vop_mkdir_desc, 9853579Sheideman vop_rmdir_desc, 9953579Sheideman vop_symlink_desc, 10053579Sheideman vop_readdir_desc, 10153579Sheideman vop_readlink_desc, 10253579Sheideman vop_abortop_desc, 10353579Sheideman vop_inactive_desc, 10453579Sheideman vop_reclaim_desc, 10553579Sheideman vop_lock_desc, 10653579Sheideman vop_unlock_desc, 10753579Sheideman vop_bmap_desc, 10853579Sheideman vop_strategy_desc, 10953579Sheideman vop_print_desc, 11053579Sheideman vop_islocked_desc, 11153579Sheideman vop_advlock_desc, 11253579Sheideman vop_blkatoff_desc, 11353579Sheideman vop_vget_desc, 11453579Sheideman vop_valloc_desc, 11553579Sheideman vop_vfree_desc, 11653579Sheideman vop_truncate_desc, 11753579Sheideman vop_update_desc, 11853579Sheideman vop_bwrite_desc, 11953579Sheideman /* and the default */ 12053579Sheideman vop_default_desc; 12153579Sheideman 12253579Sheideman struct vnodeop_desc *vfs_op_descs[] = { 12353579Sheideman &vop_default_desc, /* must be first */ 12453579Sheideman &vop_lookup_desc, 12553579Sheideman &vop_create_desc, 12653579Sheideman &vop_mknod_desc, 12753579Sheideman &vop_open_desc, 12853579Sheideman &vop_close_desc, 12953579Sheideman &vop_access_desc, 13053579Sheideman &vop_getattr_desc, 13153579Sheideman &vop_setattr_desc, 13253579Sheideman &vop_read_desc, 13353579Sheideman &vop_write_desc, 13453579Sheideman &vop_ioctl_desc, 13553579Sheideman &vop_select_desc, 13653579Sheideman &vop_mmap_desc, 13753579Sheideman &vop_fsync_desc, 13853579Sheideman &vop_seek_desc, 13953579Sheideman &vop_remove_desc, 14053579Sheideman &vop_link_desc, 14153579Sheideman &vop_rename_desc, 14253579Sheideman &vop_mkdir_desc, 14353579Sheideman &vop_rmdir_desc, 14453579Sheideman &vop_symlink_desc, 14553579Sheideman &vop_readdir_desc, 14653579Sheideman &vop_readlink_desc, 14753579Sheideman &vop_abortop_desc, 14853579Sheideman &vop_inactive_desc, 14953579Sheideman &vop_reclaim_desc, 15053579Sheideman &vop_lock_desc, 15153579Sheideman &vop_unlock_desc, 15253579Sheideman &vop_bmap_desc, 15353579Sheideman &vop_strategy_desc, 15453579Sheideman &vop_print_desc, 15553579Sheideman &vop_islocked_desc, 15653579Sheideman &vop_advlock_desc, 15753579Sheideman &vop_blkatoff_desc, 15853579Sheideman &vop_vget_desc, 15953579Sheideman &vop_valloc_desc, 16053579Sheideman &vop_vfree_desc, 16153579Sheideman &vop_truncate_desc, 16253579Sheideman &vop_update_desc, 16353579Sheideman &vop_bwrite_desc, 16453579Sheideman NULL 16553579Sheideman }; 16653579Sheideman 16753579Sheideman 16853579Sheideman 16953579Sheideman 17053579Sheideman /* 17153579Sheideman * 17253579Sheideman * vfs_opv_descs enumerates the list of vnode classes, 17353579Sheideman * each with it's own vnode operation vector. 17453579Sheideman * It is consulted at system 17553579Sheideman * boot to build operation vectors. 17653579Sheideman * It's also null terminated. 17753579Sheideman * 17853579Sheideman * Out-of-kernel, someone else (more knowlegable about what file 17953579Sheideman * systems live in this address space) must specify this table. 18053579Sheideman */ 18153579Sheideman 18253579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc; 18353579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc; 18453579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc; 18553579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc; 18653579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc; 18753579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc; 18853579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc; 18953579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc; 19053579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc; 19153579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc; 19253579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc; 19353579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc; 19453579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc; 19553579Sheideman 19653579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = { 19753579Sheideman &ffs_vnodeop_opv_desc, 19853579Sheideman &ffs_specop_opv_desc, 19953579Sheideman &ffs_fifoop_opv_desc, 200*53760Smckusick &dead_vnodeop_opv_desc, 201*53760Smckusick &fifo_vnodeop_opv_desc, 202*53760Smckusick &spec_vnodeop_opv_desc, 203*53760Smckusick #ifdef LFS 20453579Sheideman &lfs_vnodeop_opv_desc, 20553579Sheideman &lfs_specop_opv_desc, 20653579Sheideman &lfs_fifoop_opv_desc, 207*53760Smckusick #endif 208*53760Smckusick #ifdef MFS 20953579Sheideman &mfs_vnodeop_opv_desc, 210*53760Smckusick #endif 211*53760Smckusick #ifdef NFS 21253579Sheideman &nfsv2_vnodeop_opv_desc, 21353579Sheideman &spec_nfsv2nodeop_opv_desc, 21453579Sheideman &fifo_nfsv2nodeop_opv_desc, 215*53760Smckusick #endif 21653579Sheideman NULL 21753579Sheideman }; 218