1 /* 2 * Copyright (c) 1989 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 * 7 * @(#)vfs_conf.c 7.8 (Berkeley) 05/15/92 8 */ 9 10 #include <sys/param.h> 11 #include <sys/mount.h> 12 #include <sys/vnode.h> 13 14 #ifdef FFS 15 #include <ufs/ffs/ffs_extern.h> 16 17 /* 18 * This specifies the filesystem used to mount the root. 19 * This specification should be done by /etc/config. 20 */ 21 int (*mountroot)() = ffs_mountroot; 22 #endif 23 24 /* 25 * These define the root filesystem and device. 26 */ 27 struct mount *rootfs; 28 struct vnode *rootdir; 29 30 /* 31 * Set up the filesystem operations for vnodes. 32 * The types are defined in mount.h. 33 */ 34 #ifdef FFS 35 extern struct vfsops ufs_vfsops; 36 #define UFS_VFSOPS &ufs_vfsops 37 #else 38 #define UFS_VFSOPS NULL 39 #endif 40 41 #ifdef LFS 42 extern struct vfsops lfs_vfsops; 43 #define LFS_VFSOPS &lfs_vfsops 44 #else 45 #define LFS_VFSOPS NULL 46 #endif 47 48 #ifdef MFS 49 extern struct vfsops mfs_vfsops; 50 #define MFS_VFSOPS &mfs_vfsops 51 #else 52 #define MFS_VFSOPS NULL 53 #endif 54 55 #ifdef NFS 56 extern struct vfsops nfs_vfsops; 57 #define NFS_VFSOPS &nfs_vfsops 58 #else 59 #define NFS_VFSOPS NULL 60 #endif 61 62 struct vfsops *vfssw[] = { 63 NULL, /* 0 = MOUNT_NONE */ 64 UFS_VFSOPS, /* 1 = MOUNT_UFS */ 65 NFS_VFSOPS, /* 2 = MOUNT_NFS */ 66 MFS_VFSOPS, /* 3 = MOUNT_MFS */ 67 NULL, /* 4 = MOUNT_PC */ 68 LFS_VFSOPS, /* 5 = MOUNT_LFS */ 69 }; 70 71 72 /* 73 * Vnode_op_descs lists all vnode operations supported. 74 * At boot time vfs_op_init examines this list 75 * to configure vnode operations vectors. 76 */ 77 78 extern struct vnodeop_desc 79 vop_lookup_desc, 80 vop_create_desc, 81 vop_mknod_desc, 82 vop_open_desc, 83 vop_close_desc, 84 vop_access_desc, 85 vop_getattr_desc, 86 vop_setattr_desc, 87 vop_read_desc, 88 vop_write_desc, 89 vop_ioctl_desc, 90 vop_select_desc, 91 vop_mmap_desc, 92 vop_fsync_desc, 93 vop_seek_desc, 94 vop_remove_desc, 95 vop_link_desc, 96 vop_rename_desc, 97 vop_mkdir_desc, 98 vop_rmdir_desc, 99 vop_symlink_desc, 100 vop_readdir_desc, 101 vop_readlink_desc, 102 vop_abortop_desc, 103 vop_inactive_desc, 104 vop_reclaim_desc, 105 vop_lock_desc, 106 vop_unlock_desc, 107 vop_bmap_desc, 108 vop_strategy_desc, 109 vop_print_desc, 110 vop_islocked_desc, 111 vop_advlock_desc, 112 vop_blkatoff_desc, 113 vop_vget_desc, 114 vop_valloc_desc, 115 vop_vfree_desc, 116 vop_truncate_desc, 117 vop_update_desc, 118 vop_bwrite_desc, 119 /* and the default */ 120 vop_default_desc; 121 122 struct vnodeop_desc *vfs_op_descs[] = { 123 &vop_default_desc, /* must be first */ 124 &vop_lookup_desc, 125 &vop_create_desc, 126 &vop_mknod_desc, 127 &vop_open_desc, 128 &vop_close_desc, 129 &vop_access_desc, 130 &vop_getattr_desc, 131 &vop_setattr_desc, 132 &vop_read_desc, 133 &vop_write_desc, 134 &vop_ioctl_desc, 135 &vop_select_desc, 136 &vop_mmap_desc, 137 &vop_fsync_desc, 138 &vop_seek_desc, 139 &vop_remove_desc, 140 &vop_link_desc, 141 &vop_rename_desc, 142 &vop_mkdir_desc, 143 &vop_rmdir_desc, 144 &vop_symlink_desc, 145 &vop_readdir_desc, 146 &vop_readlink_desc, 147 &vop_abortop_desc, 148 &vop_inactive_desc, 149 &vop_reclaim_desc, 150 &vop_lock_desc, 151 &vop_unlock_desc, 152 &vop_bmap_desc, 153 &vop_strategy_desc, 154 &vop_print_desc, 155 &vop_islocked_desc, 156 &vop_advlock_desc, 157 &vop_blkatoff_desc, 158 &vop_vget_desc, 159 &vop_valloc_desc, 160 &vop_vfree_desc, 161 &vop_truncate_desc, 162 &vop_update_desc, 163 &vop_bwrite_desc, 164 NULL 165 }; 166 167 168 169 170 /* 171 * 172 * vfs_opv_descs enumerates the list of vnode classes, 173 * each with it's own vnode operation vector. 174 * It is consulted at system 175 * boot to build operation vectors. 176 * It's also null terminated. 177 * 178 * Out-of-kernel, someone else (more knowlegable about what file 179 * systems live in this address space) must specify this table. 180 */ 181 182 extern struct vnodeopv_desc ffs_vnodeop_opv_desc; 183 extern struct vnodeopv_desc ffs_specop_opv_desc; 184 extern struct vnodeopv_desc ffs_fifoop_opv_desc; 185 extern struct vnodeopv_desc lfs_vnodeop_opv_desc; 186 extern struct vnodeopv_desc lfs_specop_opv_desc; 187 extern struct vnodeopv_desc lfs_fifoop_opv_desc; 188 extern struct vnodeopv_desc mfs_vnodeop_opv_desc; 189 extern struct vnodeopv_desc dead_vnodeop_opv_desc; 190 extern struct vnodeopv_desc fifo_vnodeop_opv_desc; 191 extern struct vnodeopv_desc spec_vnodeop_opv_desc; 192 extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc; 193 extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc; 194 extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc; 195 196 197 struct vnodeopv_desc *vfs_opv_descs[] = { 198 &ffs_vnodeop_opv_desc, 199 &ffs_specop_opv_desc, 200 &ffs_fifoop_opv_desc, 201 &lfs_vnodeop_opv_desc, 202 &lfs_specop_opv_desc, 203 &lfs_fifoop_opv_desc, 204 &mfs_vnodeop_opv_desc, 205 &dead_vnodeop_opv_desc, 206 &fifo_vnodeop_opv_desc, 207 &spec_vnodeop_opv_desc, 208 &nfsv2_vnodeop_opv_desc, 209 &spec_nfsv2nodeop_opv_desc, 210 &fifo_nfsv2nodeop_opv_desc, 211 NULL 212 }; 213 214