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.10 (Berkeley) 06/03/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 #ifdef LOFS 63 extern struct vfsops lofs_vfsops; 64 #define LOFS_VFSOPS &lofs_vfsops 65 #else 66 #define LOFS_VFSOPS NULL 67 #endif 68 69 #ifdef FDESC 70 extern struct vfsops fdesc_vfsops; 71 #define FDESC_VFSOPS &fdesc_vfsops 72 #else 73 #define FDESC_VFSOPS NULL 74 #endif 75 76 #ifdef PORTAL 77 extern struct vfsops portal_vfsops; 78 #define PORTAL_VFSOPS &portal_vfsops 79 #else 80 #define PORTAL_VFSOPS NULL 81 #endif 82 83 struct vfsops *vfssw[] = { 84 NULL, /* 0 = MOUNT_NONE */ 85 UFS_VFSOPS, /* 1 = MOUNT_UFS */ 86 NFS_VFSOPS, /* 2 = MOUNT_NFS */ 87 MFS_VFSOPS, /* 3 = MOUNT_MFS */ 88 NULL, /* 4 = MOUNT_PC */ 89 LFS_VFSOPS, /* 5 = MOUNT_LFS */ 90 LOFS_VFSOPS, /* 6 = MOUNT_LOFS */ 91 FDESC_VFSOPS, /* 7 = MOUNT_FDESC */ 92 PORTAL_VFSOPS, /* 8 = MOUNT_PORTAL */ 93 }; 94 95 96 /* 97 * Vnode_op_descs lists all vnode operations supported. 98 * At boot time vfs_op_init examines this list 99 * to configure vnode operations vectors. 100 */ 101 102 extern struct vnodeop_desc 103 vop_lookup_desc, 104 vop_create_desc, 105 vop_mknod_desc, 106 vop_open_desc, 107 vop_close_desc, 108 vop_access_desc, 109 vop_getattr_desc, 110 vop_setattr_desc, 111 vop_read_desc, 112 vop_write_desc, 113 vop_ioctl_desc, 114 vop_select_desc, 115 vop_mmap_desc, 116 vop_fsync_desc, 117 vop_seek_desc, 118 vop_remove_desc, 119 vop_link_desc, 120 vop_rename_desc, 121 vop_mkdir_desc, 122 vop_rmdir_desc, 123 vop_symlink_desc, 124 vop_readdir_desc, 125 vop_readlink_desc, 126 vop_abortop_desc, 127 vop_inactive_desc, 128 vop_reclaim_desc, 129 vop_lock_desc, 130 vop_unlock_desc, 131 vop_bmap_desc, 132 vop_strategy_desc, 133 vop_print_desc, 134 vop_islocked_desc, 135 vop_advlock_desc, 136 vop_blkatoff_desc, 137 vop_vget_desc, 138 vop_valloc_desc, 139 vop_vfree_desc, 140 vop_truncate_desc, 141 vop_update_desc, 142 vop_bwrite_desc, 143 /* and the default */ 144 vop_default_desc; 145 146 struct vnodeop_desc *vfs_op_descs[] = { 147 &vop_default_desc, /* must be first */ 148 &vop_lookup_desc, 149 &vop_create_desc, 150 &vop_mknod_desc, 151 &vop_open_desc, 152 &vop_close_desc, 153 &vop_access_desc, 154 &vop_getattr_desc, 155 &vop_setattr_desc, 156 &vop_read_desc, 157 &vop_write_desc, 158 &vop_ioctl_desc, 159 &vop_select_desc, 160 &vop_mmap_desc, 161 &vop_fsync_desc, 162 &vop_seek_desc, 163 &vop_remove_desc, 164 &vop_link_desc, 165 &vop_rename_desc, 166 &vop_mkdir_desc, 167 &vop_rmdir_desc, 168 &vop_symlink_desc, 169 &vop_readdir_desc, 170 &vop_readlink_desc, 171 &vop_abortop_desc, 172 &vop_inactive_desc, 173 &vop_reclaim_desc, 174 &vop_lock_desc, 175 &vop_unlock_desc, 176 &vop_bmap_desc, 177 &vop_strategy_desc, 178 &vop_print_desc, 179 &vop_islocked_desc, 180 &vop_advlock_desc, 181 &vop_blkatoff_desc, 182 &vop_vget_desc, 183 &vop_valloc_desc, 184 &vop_vfree_desc, 185 &vop_truncate_desc, 186 &vop_update_desc, 187 &vop_bwrite_desc, 188 NULL 189 }; 190 191 192 193 194 /* 195 * 196 * vfs_opv_descs enumerates the list of vnode classes, 197 * each with it's own vnode operation vector. 198 * It is consulted at system 199 * boot to build operation vectors. 200 * It's also null terminated. 201 * 202 * Out-of-kernel, someone else (more knowlegable about what file 203 * systems live in this address space) must specify this table. 204 */ 205 206 extern struct vnodeopv_desc ffs_vnodeop_opv_desc; 207 extern struct vnodeopv_desc ffs_specop_opv_desc; 208 extern struct vnodeopv_desc ffs_fifoop_opv_desc; 209 extern struct vnodeopv_desc lfs_vnodeop_opv_desc; 210 extern struct vnodeopv_desc lfs_specop_opv_desc; 211 extern struct vnodeopv_desc lfs_fifoop_opv_desc; 212 extern struct vnodeopv_desc mfs_vnodeop_opv_desc; 213 extern struct vnodeopv_desc dead_vnodeop_opv_desc; 214 extern struct vnodeopv_desc fifo_vnodeop_opv_desc; 215 extern struct vnodeopv_desc spec_vnodeop_opv_desc; 216 extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc; 217 extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc; 218 extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc; 219 220 struct vnodeopv_desc *vfs_opv_descs[] = { 221 &ffs_vnodeop_opv_desc, 222 &ffs_specop_opv_desc, 223 &ffs_fifoop_opv_desc, 224 &dead_vnodeop_opv_desc, 225 &fifo_vnodeop_opv_desc, 226 &spec_vnodeop_opv_desc, 227 #ifdef LFS 228 &lfs_vnodeop_opv_desc, 229 &lfs_specop_opv_desc, 230 &lfs_fifoop_opv_desc, 231 #endif 232 #ifdef MFS 233 &mfs_vnodeop_opv_desc, 234 #endif 235 #ifdef NFS 236 &nfsv2_vnodeop_opv_desc, 237 &spec_nfsv2nodeop_opv_desc, 238 &fifo_nfsv2nodeop_opv_desc, 239 #endif 240 NULL 241 }; 242