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