137488Smckusick /* 268661Smckusick * Copyright (c) 1989, 1993, 1995 363180Sbostic * The Regents of the University of California. All rights reserved. 437488Smckusick * 544456Sbostic * %sccs.include.redist.c% 637488Smckusick * 7*69377Smckusick * @(#)vfs_conf.c 8.11 (Berkeley) 05/10/95 837488Smckusick */ 937488Smckusick 1051456Sbostic #include <sys/param.h> 1151456Sbostic #include <sys/mount.h> 1253494Sheideman #include <sys/vnode.h> 1351519Sbostic 1437488Smckusick /* 15*69377Smckusick * These define the root filesystem, device, and root filesystem type. 1637488Smckusick */ 17*69377Smckusick struct mount *rootfs; 18*69377Smckusick struct vnode *rootvnode; 19*69377Smckusick int (*mountroot)() = NULL; 2037488Smckusick 2137488Smckusick /* 22*69377Smckusick * Set up the initial array of known filesystem types. 2337488Smckusick */ 2468661Smckusick extern struct vfsops ufs_vfsops; 25*69377Smckusick extern int ffs_mountroot(); 2668661Smckusick extern struct vfsops lfs_vfsops; 27*69377Smckusick extern int lfs_mountroot(); 2868661Smckusick extern struct vfsops mfs_vfsops; 29*69377Smckusick extern int mfs_mountroot(); 3068661Smckusick extern struct vfsops cd9660_vfsops; 31*69377Smckusick extern int cd9660_mountroot(); 3268661Smckusick extern struct vfsops msdos_vfsops; 3368661Smckusick extern struct vfsops adosfs_vfsops; 3468661Smckusick extern struct vfsops nfs_vfsops; 35*69377Smckusick extern int nfs_mountroot(); 3668661Smckusick extern struct vfsops afs_vfsops; 3768661Smckusick extern struct vfsops procfs_vfsops; 3868661Smckusick extern struct vfsops null_vfsops; 3968661Smckusick extern struct vfsops union_vfsops; 4068661Smckusick extern struct vfsops umap_vfsops; 4168661Smckusick extern struct vfsops portal_vfsops; 4268661Smckusick extern struct vfsops fdesc_vfsops; 4368661Smckusick extern struct vfsops kernfs_vfsops; 4468661Smckusick 4537488Smckusick /* 4637488Smckusick * Set up the filesystem operations for vnodes. 4737488Smckusick */ 4868661Smckusick static struct vfsconf vfsconflist[] = { 4968661Smckusick 5068661Smckusick /* Fast Filesystem */ 5151519Sbostic #ifdef FFS 52*69377Smckusick { &ufs_vfsops, "ufs", 1, 0, MNT_LOCAL, ffs_mountroot, NULL }, 5351519Sbostic #endif 5437488Smckusick 5568661Smckusick /* Log-based Filesystem */ 5651456Sbostic #ifdef LFS 57*69377Smckusick { &lfs_vfsops, "lfs", 5, 0, MNT_LOCAL, lfs_mountroot, NULL }, 5837488Smckusick #endif 5937488Smckusick 6068661Smckusick /* Memory-based Filesystem */ 6139046Smckusick #ifdef MFS 62*69377Smckusick { &mfs_vfsops, "mfs", 3, 0, MNT_LOCAL, mfs_mountroot, NULL }, 6339046Smckusick #endif 6439046Smckusick 6568661Smckusick /* ISO9660 (aka CDROM) Filesystem */ 6668661Smckusick #ifdef CD9660 67*69377Smckusick { &cd9660_vfsops, "cd9660", 14, 0, MNT_LOCAL, cd9660_mountroot, NULL }, 6868661Smckusick #endif 6968661Smckusick 7068661Smckusick /* MSDOS Filesystem */ 7168661Smckusick #ifdef MSDOS 72*69377Smckusick { &msdos_vfsops, "msdos", 4, 0, MNT_LOCAL, NULL, NULL }, 7368661Smckusick #endif 7468661Smckusick 7568661Smckusick /* AmigaDOS Filesystem */ 7668661Smckusick #ifdef ADOSFS 77*69377Smckusick { &adosfs_vfsops, "adosfs", 16, 0, MNT_LOCAL, NULL, NULL }, 7868661Smckusick #endif 7968661Smckusick 8068661Smckusick /* Sun-compatible Network Filesystem */ 8151456Sbostic #ifdef NFS 82*69377Smckusick { &nfs_vfsops, "nfs", 2, 0, 0, nfs_mountroot, NULL }, 8351456Sbostic #endif 8451456Sbostic 8568661Smckusick /* Andrew Filesystem */ 8668661Smckusick #ifdef AFS 87*69377Smckusick { &afs_vfsops, "andrewfs", 13, 0, 0, afs_mountroot, NULL }, 8853827Spendry #endif 8953827Spendry 9068661Smckusick /* /proc Filesystem */ 9168661Smckusick #ifdef PROCFS 92*69377Smckusick { &procfs_vfsops, "procfs", 12, 0, 0, NULL, NULL }, 9353827Spendry #endif 9453827Spendry 9568661Smckusick /* Loopback (Minimal) Filesystem Layer */ 9654989Sheideman #ifdef NULLFS 97*69377Smckusick { &null_vfsops, "loopback", 9, 0, 0, NULL, NULL }, 9854989Sheideman #endif 9954989Sheideman 10068661Smckusick /* Union (translucent) Filesystem */ 10168661Smckusick #ifdef UNION 102*69377Smckusick { &union_vfsops, "union", 15, 0, 0, NULL, NULL }, 10354989Sheideman #endif 10454989Sheideman 10568661Smckusick /* User/Group Identifer Remapping Filesystem */ 10668661Smckusick #ifdef UMAPFS 107*69377Smckusick { &umap_vfsops, "umap", 10, 0, 0, NULL, NULL }, 10855336Spendry #endif 10954989Sheideman 11068661Smckusick /* Portal Filesystem */ 11168661Smckusick #ifdef PORTAL 112*69377Smckusick { &portal_vfsops, "portal", 8, 0, 0, NULL, NULL }, 11365147Spendry #endif 11455336Spendry 11568661Smckusick /* File Descriptor Filesystem */ 11668661Smckusick #ifdef FDESC 117*69377Smckusick { &fdesc_vfsops, "fdesc", 7, 0, 0, NULL, NULL }, 11865669Shibler #endif 11965669Shibler 12068661Smckusick /* Kernel Information Filesystem */ 12168661Smckusick #ifdef KERNFS 122*69377Smckusick { &kernfs_vfsops, "kernfs", 11, 0, 0, NULL, NULL }, 12365669Shibler #endif 12465669Shibler 12537488Smckusick }; 12653579Sheideman 12768661Smckusick /* 12868661Smckusick * Initially the size of the list, vfs_init will set maxvfsconf 12968661Smckusick * to the highest defined type number. 13068661Smckusick */ 13168661Smckusick int maxvfsconf = sizeof(vfsconflist) / sizeof (struct vfsconf); 13268661Smckusick struct vfsconf *vfsconf = vfsconflist; 13353579Sheideman 13453579Sheideman /* 13553579Sheideman * 13654724Sbostic * vfs_opv_descs enumerates the list of vnode classes, each with it's own 13754724Sbostic * vnode operation vector. It is consulted at system boot to build operation 13854724Sbostic * vectors. It is NULL terminated. 13953579Sheideman * 14053579Sheideman */ 14153579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc; 14253579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc; 14353579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc; 14453579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc; 14553579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc; 14653579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc; 14753579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc; 14853579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc; 14953579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc; 15053579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc; 15153579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc; 15253579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc; 15353579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc; 15453943Spendry extern struct vnodeopv_desc fdesc_vnodeop_opv_desc; 15553943Spendry extern struct vnodeopv_desc portal_vnodeop_opv_desc; 15654989Sheideman extern struct vnodeopv_desc null_vnodeop_opv_desc; 15754989Sheideman extern struct vnodeopv_desc umap_vnodeop_opv_desc; 15855336Spendry extern struct vnodeopv_desc kernfs_vnodeop_opv_desc; 15965147Spendry extern struct vnodeopv_desc procfs_vnodeop_opv_desc; 16065899Shibler extern struct vnodeopv_desc cd9660_vnodeop_opv_desc; 16165899Shibler extern struct vnodeopv_desc cd9660_specop_opv_desc; 16265899Shibler extern struct vnodeopv_desc cd9660_fifoop_opv_desc; 16365937Spendry extern struct vnodeopv_desc union_vnodeop_opv_desc; 16453579Sheideman 16553579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = { 16653579Sheideman &ffs_vnodeop_opv_desc, 16753579Sheideman &ffs_specop_opv_desc, 16854343Smckusick #ifdef FIFO 16953579Sheideman &ffs_fifoop_opv_desc, 17054343Smckusick #endif 17153760Smckusick &dead_vnodeop_opv_desc, 17254343Smckusick #ifdef FIFO 17353760Smckusick &fifo_vnodeop_opv_desc, 17454343Smckusick #endif 17553760Smckusick &spec_vnodeop_opv_desc, 17653760Smckusick #ifdef LFS 17753579Sheideman &lfs_vnodeop_opv_desc, 17853579Sheideman &lfs_specop_opv_desc, 17954343Smckusick #ifdef FIFO 18053579Sheideman &lfs_fifoop_opv_desc, 18153760Smckusick #endif 18254343Smckusick #endif 18353760Smckusick #ifdef MFS 18453579Sheideman &mfs_vnodeop_opv_desc, 18553760Smckusick #endif 18653760Smckusick #ifdef NFS 18753579Sheideman &nfsv2_vnodeop_opv_desc, 18853579Sheideman &spec_nfsv2nodeop_opv_desc, 18954343Smckusick #ifdef FIFO 19053579Sheideman &fifo_nfsv2nodeop_opv_desc, 19153760Smckusick #endif 19254343Smckusick #endif 19353943Spendry #ifdef FDESC 19453943Spendry &fdesc_vnodeop_opv_desc, 19553943Spendry #endif 19653943Spendry #ifdef PORTAL 19753943Spendry &portal_vnodeop_opv_desc, 19853943Spendry #endif 19954989Sheideman #ifdef NULLFS 20054989Sheideman &null_vnodeop_opv_desc, 20154989Sheideman #endif 20254989Sheideman #ifdef UMAPFS 20354989Sheideman &umap_vnodeop_opv_desc, 20454989Sheideman #endif 20555336Spendry #ifdef KERNFS 20655336Spendry &kernfs_vnodeop_opv_desc, 20755336Spendry #endif 20865147Spendry #ifdef PROCFS 20965147Spendry &procfs_vnodeop_opv_desc, 21065147Spendry #endif 21165897Shibler #ifdef CD9660 21265899Shibler &cd9660_vnodeop_opv_desc, 21365899Shibler &cd9660_specop_opv_desc, 21465669Shibler #ifdef FIFO 21565899Shibler &cd9660_fifoop_opv_desc, 21665669Shibler #endif 21765669Shibler #endif 21865937Spendry #ifdef UNION 21965937Spendry &union_vnodeop_opv_desc, 22065937Spendry #endif 22153579Sheideman NULL 22253579Sheideman }; 223