darwin-xnu/bsd/vfs/vfs_conf.c
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2004 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_internal.h>
  61#include <sys/vnode_internal.h>
  62
  63/*
  64 * These define the root filesystem, device, and root filesystem type.
  65 */
  66struct mount *rootfs;
  67struct vnode *rootvnode;
  68int (*mountroot)() = NULL;
  69
  70/*
  71 * Set up the initial array of known filesystem types.
  72 */
  73extern  struct vfsops ufs_vfsops;
  74#if FFS
  75extern  int ffs_mountroot();
  76#endif
  77extern  struct vfsops mfs_vfsops;
  78extern  int mfs_mountroot();
  79extern  struct vfsops hfs_vfsops;
  80extern  int hfs_mountroot();
  81extern  struct vfsops volfs_vfsops;
  82extern  struct vfsops cd9660_vfsops;
  83extern  int cd9660_mountroot();
  84extern  struct vfsops nfs_vfsops;
  85extern  int nfs_mountroot();
  86extern  struct vfsops afs_vfsops;
  87extern  struct vfsops null_vfsops;
  88extern  struct vfsops union_vfsops;
  89extern  struct vfsops fdesc_vfsops;
  90extern  struct vfsops devfs_vfsops;
  91
  92/*
  93 * Set up the filesystem operations for vnodes.
  94 */
  95static struct vfstable vfsconflist[] = {
  96        /* HFS/HFS+ Filesystem */
  97#if HFS
  98        { &hfs_vfsops, "hfs", 17, 0, MNT_LOCAL | MNT_DOVOLFS, hfs_mountroot, NULL, 0, {0}, VFC_VFSLOCALARGS, 0, 0 },
  99#endif
 100
 101        /* Fast Filesystem */
 102#if FFS
 103        { &ufs_vfsops, "ufs", 1, 0, MNT_LOCAL, ffs_mountroot, NULL, 0, {0}, VFC_VFSLOCALARGS, 0, 0  },
 104#endif
 105
 106        /* ISO9660 (aka CDROM) Filesystem */
 107#if CD9660
 108        { &cd9660_vfsops, "cd9660", 14, 0, MNT_LOCAL, cd9660_mountroot, NULL, 0, {0}, VFC_VFSLOCALARGS, 0, 0 },
 109#endif
 110
 111        /* Memory-based Filesystem */
 112#if MFS
 113        { &mfs_vfsops, "mfs", 3, 0, MNT_LOCAL, mfs_mountroot, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 114#endif
 115
 116        /* Sun-compatible Network Filesystem */
 117#if NFSCLIENT
 118        { &nfs_vfsops, "nfs", 2, 0, 0, nfs_mountroot, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 119#endif
 120
 121        /* Andrew Filesystem */
 122#if AFS
 123        { &afs_vfsops, "andrewfs", 13, 0, 0, afs_mountroot, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 124#endif
 125
 126        /* Loopback (Minimal) Filesystem Layer */
 127#if NULLFS
 128        { &null_vfsops, "loopback", 9, 0, 0, NULL, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 129#endif
 130
 131        /* Union (translucent) Filesystem */
 132#if UNION
 133        { &union_vfsops, "union", 15, 0, 0, NULL, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 134#endif
 135
 136        /* File Descriptor Filesystem */
 137#if FDESC
 138        { &fdesc_vfsops, "fdesc", 7, 0, 0, NULL, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 139#endif
 140
 141        /* Volume ID Filesystem */
 142#if VOLFS
 143        { &volfs_vfsops, "volfs", 18, 0, 0, NULL, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 144#endif
 145
 146        /* Device Filesystem */
 147#if DEVFS
 148        { &devfs_vfsops, "devfs", 19, 0, 0, NULL, NULL, 0, {0}, VFC_VFSGENERICARGS , 0, 0},
 149#endif
 150
 151        {0},
 152        {0},
 153        {0},
 154        {0},
 155        {0},
 156        {0},
 157        {0},
 158        {0},
 159        {0},
 160        {0},
 161        {0},
 162        {0},
 163        {0},
 164        {0}
 165};
 166
 167/*
 168 * Initially the size of the list, vfs_init will set maxvfsconf
 169 * to the highest defined type number.
 170 */
 171int maxvfsslots = sizeof(vfsconflist) / sizeof (struct vfsconf);
 172int numused_vfsslots = 0;
 173int maxvfsconf = sizeof(vfsconflist) / sizeof (struct vfsconf);
 174struct vfstable *vfsconf = vfsconflist;
 175
 176/*
 177 *
 178 * vfs_opv_descs enumerates the list of vnode classes, each with it's own
 179 * vnode operation vector.  It is consulted at system boot to build operation
 180 * vectors.  It is NULL terminated.
 181 *
 182 */
 183#if FFS
 184extern struct vnodeopv_desc ffs_vnodeop_opv_desc;
 185extern struct vnodeopv_desc ffs_specop_opv_desc;
 186extern struct vnodeopv_desc ffs_fifoop_opv_desc;
 187#endif
 188extern struct vnodeopv_desc mfs_vnodeop_opv_desc;
 189extern struct vnodeopv_desc dead_vnodeop_opv_desc;
 190extern struct vnodeopv_desc fifo_vnodeop_opv_desc;
 191extern struct vnodeopv_desc spec_vnodeop_opv_desc;
 192extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc;
 193extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc;
 194extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc;
 195extern struct vnodeopv_desc fdesc_vnodeop_opv_desc;
 196extern struct vnodeopv_desc null_vnodeop_opv_desc;
 197extern struct vnodeopv_desc hfs_vnodeop_opv_desc;
 198extern struct vnodeopv_desc hfs_specop_opv_desc;
 199extern struct vnodeopv_desc hfs_fifoop_opv_desc;
 200extern struct vnodeopv_desc volfs_vnodeop_opv_desc;
 201extern struct vnodeopv_desc cd9660_vnodeop_opv_desc;
 202extern struct vnodeopv_desc cd9660_cdxaop_opv_desc;
 203extern struct vnodeopv_desc cd9660_specop_opv_desc;
 204extern struct vnodeopv_desc cd9660_fifoop_opv_desc;
 205extern struct vnodeopv_desc union_vnodeop_opv_desc;
 206extern struct vnodeopv_desc devfs_vnodeop_opv_desc;
 207extern struct vnodeopv_desc devfs_spec_vnodeop_opv_desc;
 208
 209struct vnodeopv_desc *vfs_opv_descs[] = {
 210#if FFS
 211        &ffs_vnodeop_opv_desc,
 212        &ffs_specop_opv_desc,
 213#if FIFO
 214        &ffs_fifoop_opv_desc,
 215#endif
 216#endif
 217        &dead_vnodeop_opv_desc,
 218#if FIFO
 219        &fifo_vnodeop_opv_desc,
 220#endif
 221        &spec_vnodeop_opv_desc,
 222#if MFS
 223        &mfs_vnodeop_opv_desc,
 224#endif
 225#if NFSCLIENT
 226        &nfsv2_vnodeop_opv_desc,
 227        &spec_nfsv2nodeop_opv_desc,
 228#if FIFO
 229        &fifo_nfsv2nodeop_opv_desc,
 230#endif
 231#endif
 232#if FDESC
 233        &fdesc_vnodeop_opv_desc,
 234#endif
 235#if NULLFS
 236        &null_vnodeop_opv_desc,
 237#endif
 238#if HFS
 239        &hfs_vnodeop_opv_desc,
 240        &hfs_specop_opv_desc,
 241#if FIFO
 242        &hfs_fifoop_opv_desc,
 243#endif
 244#endif
 245#if CD9660
 246        &cd9660_vnodeop_opv_desc,
 247        &cd9660_cdxaop_opv_desc,
 248        &cd9660_specop_opv_desc,
 249#if FIFO
 250        &cd9660_fifoop_opv_desc,
 251#endif
 252#endif
 253#if UNION
 254        &union_vnodeop_opv_desc,
 255#endif
 256#if VOLFS
 257        &volfs_vnodeop_opv_desc,
 258#endif
 259#if DEVFS
 260        &devfs_vnodeop_opv_desc,
 261        &devfs_spec_vnodeop_opv_desc,
 262#endif
 263        NULL
 264};
 265
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.