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