137488Smckusick /* 237488Smckusick * Copyright (c) 1989 The Regents of the University of California. 337488Smckusick * All rights reserved. 437488Smckusick * 544456Sbostic * %sccs.include.redist.c% 637488Smckusick * 7*53827Spendry * @(#)vfs_conf.c 7.10 (Berkeley) 06/03/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 62*53827Spendry #ifdef LOFS 63*53827Spendry extern struct vfsops lofs_vfsops; 64*53827Spendry #define LOFS_VFSOPS &lofs_vfsops 65*53827Spendry #else 66*53827Spendry #define LOFS_VFSOPS NULL 67*53827Spendry #endif 68*53827Spendry 69*53827Spendry #ifdef FDESC 70*53827Spendry extern struct vfsops fdesc_vfsops; 71*53827Spendry #define FDESC_VFSOPS &fdesc_vfsops 72*53827Spendry #else 73*53827Spendry #define FDESC_VFSOPS NULL 74*53827Spendry #endif 75*53827Spendry 76*53827Spendry #ifdef PORTAL 77*53827Spendry extern struct vfsops portal_vfsops; 78*53827Spendry #define PORTAL_VFSOPS &portal_vfsops 79*53827Spendry #else 80*53827Spendry #define PORTAL_VFSOPS NULL 81*53827Spendry #endif 82*53827Spendry 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 */ 90*53827Spendry LOFS_VFSOPS, /* 6 = MOUNT_LOFS */ 91*53827Spendry FDESC_VFSOPS, /* 7 = MOUNT_FDESC */ 92*53827Spendry 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; 21953579Sheideman 22053579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = { 22153579Sheideman &ffs_vnodeop_opv_desc, 22253579Sheideman &ffs_specop_opv_desc, 22353579Sheideman &ffs_fifoop_opv_desc, 22453760Smckusick &dead_vnodeop_opv_desc, 22553760Smckusick &fifo_vnodeop_opv_desc, 22653760Smckusick &spec_vnodeop_opv_desc, 22753760Smckusick #ifdef LFS 22853579Sheideman &lfs_vnodeop_opv_desc, 22953579Sheideman &lfs_specop_opv_desc, 23053579Sheideman &lfs_fifoop_opv_desc, 23153760Smckusick #endif 23253760Smckusick #ifdef MFS 23353579Sheideman &mfs_vnodeop_opv_desc, 23453760Smckusick #endif 23553760Smckusick #ifdef NFS 23653579Sheideman &nfsv2_vnodeop_opv_desc, 23753579Sheideman &spec_nfsv2nodeop_opv_desc, 23853579Sheideman &fifo_nfsv2nodeop_opv_desc, 23953760Smckusick #endif 24053579Sheideman NULL 24153579Sheideman }; 242