|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ ! 23: /* ! 24: * Copyright (c) 1989, 1993, 1995 ! 25: * The Regents of the University of California. All rights reserved. ! 26: * ! 27: * Redistribution and use in source and binary forms, with or without ! 28: * modification, are permitted provided that the following conditions ! 29: * are met: ! 30: * 1. Redistributions of source code must retain the above copyright ! 31: * notice, this list of conditions and the following disclaimer. ! 32: * 2. Redistributions in binary form must reproduce the above copyright ! 33: * notice, this list of conditions and the following disclaimer in the ! 34: * documentation and/or other materials provided with the distribution. ! 35: * 3. All advertising materials mentioning features or use of this software ! 36: * must display the following acknowledgement: ! 37: * This product includes software developed by the University of ! 38: * California, Berkeley and its contributors. ! 39: * 4. Neither the name of the University nor the names of its contributors ! 40: * may be used to endorse or promote products derived from this software ! 41: * without specific prior written permission. ! 42: * ! 43: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 44: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 45: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 46: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 47: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 48: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 49: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 50: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 51: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 52: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 53: * SUCH DAMAGE. ! 54: * ! 55: * @(#)vfs_conf.c 8.11 (Berkeley) 5/10/95 ! 56: */ ! 57: ! 58: #include <sys/param.h> ! 59: #include <sys/systm.h> ! 60: #include <sys/mount.h> ! 61: #include <sys/vnode.h> ! 62: ! 63: /* ! 64: * These define the root filesystem, device, and root filesystem type. ! 65: */ ! 66: struct mount *rootfs; ! 67: struct vnode *rootvnode; ! 68: int (*mountroot)() = NULL; ! 69: ! 70: /* ! 71: * Set up the initial array of known filesystem types. ! 72: */ ! 73: extern struct vfsops ufs_vfsops; ! 74: extern int ffs_mountroot(); ! 75: extern struct vfsops lfs_vfsops; ! 76: extern int lfs_mountroot(); ! 77: extern struct vfsops mfs_vfsops; ! 78: extern int mfs_mountroot(); ! 79: extern struct vfsops hfs_vfsops; ! 80: extern int hfs_mountroot(); ! 81: extern struct vfsops volfs_vfsops; ! 82: extern struct vfsops cd9660_vfsops; ! 83: extern int cd9660_mountroot(); ! 84: extern struct vfsops msdos_vfsops; ! 85: extern struct vfsops adosfs_vfsops; ! 86: extern struct vfsops nfs_vfsops; ! 87: extern int nfs_mountroot(); ! 88: extern struct vfsops afs_vfsops; ! 89: extern struct vfsops procfs_vfsops; ! 90: extern struct vfsops null_vfsops; ! 91: extern struct vfsops union_vfsops; ! 92: extern struct vfsops umap_vfsops; ! 93: extern struct vfsops portal_vfsops; ! 94: extern struct vfsops fdesc_vfsops; ! 95: extern struct vfsops kernfs_vfsops; ! 96: extern struct vfsops devfs_vfsops; ! 97: ! 98: /* ! 99: * Set up the filesystem operations for vnodes. ! 100: */ ! 101: static struct vfsconf vfsconflist[] = { ! 102: ! 103: /* Fast Filesystem */ ! 104: #if FFS ! 105: { &ufs_vfsops, "ufs", 1, 0, MNT_LOCAL, ffs_mountroot, NULL }, ! 106: #endif ! 107: ! 108: /* HFS/HFS+ Filesystem */ ! 109: #if HFS ! 110: { &hfs_vfsops, "hfs", 17, 0, MNT_LOCAL | MNT_DOVOLFS, hfs_mountroot, NULL }, ! 111: #endif ! 112: ! 113: /* ISO9660 (aka CDROM) Filesystem */ ! 114: #if CD9660 ! 115: { &cd9660_vfsops, "cd9660", 14, 0, MNT_LOCAL | MNT_DOVOLFS, cd9660_mountroot, NULL }, ! 116: #endif ! 117: ! 118: /* Log-based Filesystem */ ! 119: #if LFS ! 120: { &lfs_vfsops, "lfs", 5, 0, MNT_LOCAL, lfs_mountroot, NULL }, ! 121: #endif ! 122: ! 123: /* Memory-based Filesystem */ ! 124: #if MFS ! 125: { &mfs_vfsops, "mfs", 3, 0, MNT_LOCAL, mfs_mountroot, NULL }, ! 126: #endif ! 127: ! 128: /* MSDOS Filesystem */ ! 129: #if MSDOS ! 130: { &msdos_vfsops, "msdos", 4, 0, MNT_LOCAL, NULL, NULL }, ! 131: #endif ! 132: ! 133: /* AmigaDOS Filesystem */ ! 134: #if ADOSFS ! 135: { &adosfs_vfsops, "adosfs", 16, 0, MNT_LOCAL, NULL, NULL }, ! 136: #endif ! 137: ! 138: /* Sun-compatible Network Filesystem */ ! 139: #if NFSCLIENT ! 140: { &nfs_vfsops, "nfs", 2, 0, 0, nfs_mountroot, NULL }, ! 141: #endif ! 142: ! 143: /* Andrew Filesystem */ ! 144: #if AFS ! 145: { &afs_vfsops, "andrewfs", 13, 0, 0, afs_mountroot, NULL }, ! 146: #endif ! 147: ! 148: /* /proc Filesystem */ ! 149: #if PROCFS ! 150: { &procfs_vfsops, "procfs", 12, 0, 0, NULL, NULL }, ! 151: #endif ! 152: ! 153: /* Loopback (Minimal) Filesystem Layer */ ! 154: #if NULLFS ! 155: { &null_vfsops, "loopback", 9, 0, 0, NULL, NULL }, ! 156: #endif ! 157: ! 158: /* Union (translucent) Filesystem */ ! 159: #if UNION ! 160: { &union_vfsops, "union", 15, 0, 0, NULL, NULL }, ! 161: #endif ! 162: ! 163: /* User/Group Identifer Remapping Filesystem */ ! 164: #if UMAPFS ! 165: { &umap_vfsops, "umap", 10, 0, 0, NULL, NULL }, ! 166: #endif ! 167: ! 168: /* Portal Filesystem */ ! 169: #if PORTAL ! 170: { &portal_vfsops, "portal", 8, 0, 0, NULL, NULL }, ! 171: #endif ! 172: ! 173: /* File Descriptor Filesystem */ ! 174: #if FDESC ! 175: { &fdesc_vfsops, "fdesc", 7, 0, 0, NULL, NULL }, ! 176: #endif ! 177: ! 178: /* Kernel Information Filesystem */ ! 179: #if KERNFS ! 180: { &kernfs_vfsops, "kernfs", 11, 0, 0, NULL, NULL }, ! 181: #endif ! 182: ! 183: /* Volume ID Filesystem */ ! 184: #if VOLFS ! 185: { &volfs_vfsops, "volfs", 18, 0, 0, NULL, NULL }, ! 186: #endif ! 187: /* Device Filesystem */ ! 188: #if DEVFS ! 189: { &devfs_vfsops, "devfs", 19, 0, 0, NULL, NULL }, ! 190: #endif ! 191: {0}, ! 192: {0}, ! 193: {0}, ! 194: {0}, ! 195: {0}, ! 196: {0}, ! 197: {0}, ! 198: {0} ! 199: }; ! 200: ! 201: /* ! 202: * Initially the size of the list, vfs_init will set maxvfsconf ! 203: * to the highest defined type number. ! 204: */ ! 205: int maxvfsslots = sizeof(vfsconflist) / sizeof (struct vfsconf); ! 206: int numused_vfsslots = 0; ! 207: int maxvfsconf = sizeof(vfsconflist) / sizeof (struct vfsconf); ! 208: struct vfsconf *vfsconf = vfsconflist; ! 209: ! 210: /* ! 211: * ! 212: * vfs_opv_descs enumerates the list of vnode classes, each with it's own ! 213: * vnode operation vector. It is consulted at system boot to build operation ! 214: * vectors. It is NULL terminated. ! 215: * ! 216: */ ! 217: extern struct vnodeopv_desc ffs_vnodeop_opv_desc; ! 218: extern struct vnodeopv_desc ffs_specop_opv_desc; ! 219: extern struct vnodeopv_desc ffs_fifoop_opv_desc; ! 220: extern struct vnodeopv_desc lfs_vnodeop_opv_desc; ! 221: extern struct vnodeopv_desc lfs_specop_opv_desc; ! 222: extern struct vnodeopv_desc lfs_fifoop_opv_desc; ! 223: extern struct vnodeopv_desc mfs_vnodeop_opv_desc; ! 224: extern struct vnodeopv_desc dead_vnodeop_opv_desc; ! 225: extern struct vnodeopv_desc fifo_vnodeop_opv_desc; ! 226: extern struct vnodeopv_desc spec_vnodeop_opv_desc; ! 227: extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc; ! 228: extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc; ! 229: extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc; ! 230: extern struct vnodeopv_desc fdesc_vnodeop_opv_desc; ! 231: extern struct vnodeopv_desc portal_vnodeop_opv_desc; ! 232: extern struct vnodeopv_desc null_vnodeop_opv_desc; ! 233: extern struct vnodeopv_desc umap_vnodeop_opv_desc; ! 234: extern struct vnodeopv_desc kernfs_vnodeop_opv_desc; ! 235: extern struct vnodeopv_desc procfs_vnodeop_opv_desc; ! 236: extern struct vnodeopv_desc hfs_vnodeop_opv_desc; ! 237: extern struct vnodeopv_desc hfs_specop_opv_desc; ! 238: extern struct vnodeopv_desc hfs_fifoop_opv_desc; ! 239: extern struct vnodeopv_desc volfs_vnodeop_opv_desc; ! 240: extern struct vnodeopv_desc cd9660_vnodeop_opv_desc; ! 241: extern struct vnodeopv_desc cd9660_specop_opv_desc; ! 242: extern struct vnodeopv_desc cd9660_fifoop_opv_desc; ! 243: extern struct vnodeopv_desc union_vnodeop_opv_desc; ! 244: extern struct vnodeopv_desc procfs_vnodeop_opv_desc; ! 245: extern struct vnodeopv_desc devfs_vnodeop_opv_desc; ! 246: extern struct vnodeopv_desc devfs_spec_vnodeop_opv_desc; ! 247: ! 248: struct vnodeopv_desc *vfs_opv_descs[] = { ! 249: &ffs_vnodeop_opv_desc, ! 250: &ffs_specop_opv_desc, ! 251: #if FIFO ! 252: &ffs_fifoop_opv_desc, ! 253: #endif ! 254: &dead_vnodeop_opv_desc, ! 255: #if FIFO ! 256: &fifo_vnodeop_opv_desc, ! 257: #endif ! 258: &spec_vnodeop_opv_desc, ! 259: #if LFS ! 260: &lfs_vnodeop_opv_desc, ! 261: &lfs_specop_opv_desc, ! 262: #if FIFO ! 263: &lfs_fifoop_opv_desc, ! 264: #endif ! 265: #endif ! 266: #if MFS ! 267: &mfs_vnodeop_opv_desc, ! 268: #endif ! 269: #if NFSCLIENT ! 270: &nfsv2_vnodeop_opv_desc, ! 271: &spec_nfsv2nodeop_opv_desc, ! 272: #if FIFO ! 273: &fifo_nfsv2nodeop_opv_desc, ! 274: #endif ! 275: #endif ! 276: #if FDESC ! 277: &fdesc_vnodeop_opv_desc, ! 278: #endif ! 279: #if PORTAL ! 280: &portal_vnodeop_opv_desc, ! 281: #endif ! 282: #if NULLFS ! 283: &null_vnodeop_opv_desc, ! 284: #endif ! 285: #if UMAPFS ! 286: &umap_vnodeop_opv_desc, ! 287: #endif ! 288: #if KERNFS ! 289: &kernfs_vnodeop_opv_desc, ! 290: #endif ! 291: #if PROCFS ! 292: &procfs_vnodeop_opv_desc, ! 293: #endif ! 294: #if HFS ! 295: &hfs_vnodeop_opv_desc, ! 296: &hfs_specop_opv_desc, ! 297: #if FIFO ! 298: &hfs_fifoop_opv_desc, ! 299: #endif ! 300: #endif ! 301: #if CD9660 ! 302: &cd9660_vnodeop_opv_desc, ! 303: &cd9660_specop_opv_desc, ! 304: #if FIFO ! 305: &cd9660_fifoop_opv_desc, ! 306: #endif ! 307: #endif ! 308: #if UNION ! 309: &union_vnodeop_opv_desc, ! 310: #endif ! 311: #if VOLFS ! 312: &volfs_vnodeop_opv_desc, ! 313: #endif ! 314: #if DEVFS ! 315: &devfs_vnodeop_opv_desc, ! 316: &devfs_spec_vnodeop_opv_desc, ! 317: #endif ! 318: NULL ! 319: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.