137488Smckusick /* 2*68661Smckusick * Copyright (c) 1989, 1993, 1995 363180Sbostic * The Regents of the University of California. All rights reserved. 437488Smckusick * 544456Sbostic * %sccs.include.redist.c% 637488Smckusick * 7*68661Smckusick * @(#)vfs_conf.c 8.10 (Berkeley) 03/30/95 837488Smckusick */ 937488Smckusick 1051456Sbostic #include <sys/param.h> 1151456Sbostic #include <sys/mount.h> 1253494Sheideman #include <sys/vnode.h> 1351519Sbostic 1451519Sbostic #ifdef FFS 1568561Smckusick #include <ufs/ufs/dinode.h> 1651456Sbostic #include <ufs/ffs/ffs_extern.h> 1737488Smckusick 1837488Smckusick /* 1937488Smckusick * This specifies the filesystem used to mount the root. 2037488Smckusick * This specification should be done by /etc/config. 2137488Smckusick */ 2251456Sbostic int (*mountroot)() = ffs_mountroot; 2351519Sbostic #endif 2437488Smckusick 2537488Smckusick /* 2637488Smckusick * These define the root filesystem and device. 2737488Smckusick */ 2837488Smckusick struct mount *rootfs; 2964407Sbostic struct vnode *rootvnode; 3037488Smckusick 31*68661Smckusick extern struct vfsops ufs_vfsops; 32*68661Smckusick extern struct vfsops lfs_vfsops; 33*68661Smckusick extern struct vfsops mfs_vfsops; 34*68661Smckusick extern struct vfsops cd9660_vfsops; 35*68661Smckusick extern struct vfsops msdos_vfsops; 36*68661Smckusick extern struct vfsops adosfs_vfsops; 37*68661Smckusick extern struct vfsops nfs_vfsops; 38*68661Smckusick extern struct vfsops afs_vfsops; 39*68661Smckusick extern struct vfsops procfs_vfsops; 40*68661Smckusick extern struct vfsops null_vfsops; 41*68661Smckusick extern struct vfsops union_vfsops; 42*68661Smckusick extern struct vfsops umap_vfsops; 43*68661Smckusick extern struct vfsops portal_vfsops; 44*68661Smckusick extern struct vfsops fdesc_vfsops; 45*68661Smckusick extern struct vfsops kernfs_vfsops; 46*68661Smckusick 4737488Smckusick /* 4837488Smckusick * Set up the filesystem operations for vnodes. 4937488Smckusick */ 50*68661Smckusick static struct vfsconf vfsconflist[] = { 51*68661Smckusick 52*68661Smckusick /* Fast Filesystem */ 5351519Sbostic #ifdef FFS 54*68661Smckusick { &ufs_vfsops, "ufs", 1, 0, MNT_LOCAL, NULL }, 5551519Sbostic #endif 5637488Smckusick 57*68661Smckusick /* Log-based Filesystem */ 5851456Sbostic #ifdef LFS 59*68661Smckusick { &lfs_vfsops, "lfs", 5, 0, MNT_LOCAL, NULL }, 6037488Smckusick #endif 6137488Smckusick 62*68661Smckusick /* Memory-based Filesystem */ 6339046Smckusick #ifdef MFS 64*68661Smckusick { &mfs_vfsops, "mfs", 3, 0, MNT_LOCAL, NULL }, 6539046Smckusick #endif 6639046Smckusick 67*68661Smckusick /* ISO9660 (aka CDROM) Filesystem */ 68*68661Smckusick #ifdef CD9660 69*68661Smckusick { &cd9660_vfsops, "cd9660", 14, 0, MNT_LOCAL, NULL }, 70*68661Smckusick #endif 71*68661Smckusick 72*68661Smckusick /* MSDOS Filesystem */ 73*68661Smckusick #ifdef MSDOS 74*68661Smckusick { &msdos_vfsops, "msdos", 4, 0, MNT_LOCAL, NULL }, 75*68661Smckusick #endif 76*68661Smckusick 77*68661Smckusick /* AmigaDOS Filesystem */ 78*68661Smckusick #ifdef ADOSFS 79*68661Smckusick { &adosfs_vfsops, "adosfs", 16, 0, MNT_LOCAL, NULL }, 80*68661Smckusick #endif 81*68661Smckusick 82*68661Smckusick /* Sun-compatible Network Filesystem */ 8351456Sbostic #ifdef NFS 84*68661Smckusick { &nfs_vfsops, "nfs", 2, 0, 0, NULL }, 8551456Sbostic #endif 8651456Sbostic 87*68661Smckusick /* Andrew Filesystem */ 88*68661Smckusick #ifdef AFS 89*68661Smckusick { &afs_vfsops, "andrewfs", 13, 0, 0, NULL }, 9053827Spendry #endif 9153827Spendry 92*68661Smckusick /* /proc Filesystem */ 93*68661Smckusick #ifdef PROCFS 94*68661Smckusick { &procfs_vfsops, "procfs", 12, 0, 0, NULL }, 9553827Spendry #endif 9653827Spendry 97*68661Smckusick /* Loopback (Minimal) Filesystem Layer */ 9854989Sheideman #ifdef NULLFS 99*68661Smckusick { &null_vfsops, "loopback", 9, 0, 0, NULL }, 10054989Sheideman #endif 10154989Sheideman 102*68661Smckusick /* Union (translucent) Filesystem */ 103*68661Smckusick #ifdef UNION 104*68661Smckusick { &union_vfsops, "union", 15, 0, 0, NULL }, 10554989Sheideman #endif 10654989Sheideman 107*68661Smckusick /* User/Group Identifer Remapping Filesystem */ 108*68661Smckusick #ifdef UMAPFS 109*68661Smckusick { &umap_vfsops, "umap", 10, 0, 0, NULL }, 11055336Spendry #endif 11154989Sheideman 112*68661Smckusick /* Portal Filesystem */ 113*68661Smckusick #ifdef PORTAL 114*68661Smckusick { &portal_vfsops, "portal", 8, 0, 0, NULL }, 11565147Spendry #endif 11655336Spendry 117*68661Smckusick /* File Descriptor Filesystem */ 118*68661Smckusick #ifdef FDESC 119*68661Smckusick { &fdesc_vfsops, "fdesc", 7, 0, 0, NULL }, 12065669Shibler #endif 12165669Shibler 122*68661Smckusick /* Kernel Information Filesystem */ 123*68661Smckusick #ifdef KERNFS 124*68661Smckusick { &kernfs_vfsops, "kernfs", 11, 0, 0, NULL }, 12565669Shibler #endif 12665669Shibler 12737488Smckusick }; 12853579Sheideman 129*68661Smckusick /* 130*68661Smckusick * Initially the size of the list, vfs_init will set maxvfsconf 131*68661Smckusick * to the highest defined type number. 132*68661Smckusick */ 133*68661Smckusick int maxvfsconf = sizeof(vfsconflist) / sizeof (struct vfsconf); 134*68661Smckusick struct vfsconf *vfsconf = vfsconflist; 13553579Sheideman 13653579Sheideman /* 13753579Sheideman * 13854724Sbostic * vfs_opv_descs enumerates the list of vnode classes, each with it's own 13954724Sbostic * vnode operation vector. It is consulted at system boot to build operation 14054724Sbostic * vectors. It is NULL terminated. 14153579Sheideman * 14253579Sheideman */ 14353579Sheideman extern struct vnodeopv_desc ffs_vnodeop_opv_desc; 14453579Sheideman extern struct vnodeopv_desc ffs_specop_opv_desc; 14553579Sheideman extern struct vnodeopv_desc ffs_fifoop_opv_desc; 14653579Sheideman extern struct vnodeopv_desc lfs_vnodeop_opv_desc; 14753579Sheideman extern struct vnodeopv_desc lfs_specop_opv_desc; 14853579Sheideman extern struct vnodeopv_desc lfs_fifoop_opv_desc; 14953579Sheideman extern struct vnodeopv_desc mfs_vnodeop_opv_desc; 15053579Sheideman extern struct vnodeopv_desc dead_vnodeop_opv_desc; 15153579Sheideman extern struct vnodeopv_desc fifo_vnodeop_opv_desc; 15253579Sheideman extern struct vnodeopv_desc spec_vnodeop_opv_desc; 15353579Sheideman extern struct vnodeopv_desc nfsv2_vnodeop_opv_desc; 15453579Sheideman extern struct vnodeopv_desc spec_nfsv2nodeop_opv_desc; 15553579Sheideman extern struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc; 15653943Spendry extern struct vnodeopv_desc fdesc_vnodeop_opv_desc; 15753943Spendry extern struct vnodeopv_desc portal_vnodeop_opv_desc; 15854989Sheideman extern struct vnodeopv_desc null_vnodeop_opv_desc; 15954989Sheideman extern struct vnodeopv_desc umap_vnodeop_opv_desc; 16055336Spendry extern struct vnodeopv_desc kernfs_vnodeop_opv_desc; 16165147Spendry extern struct vnodeopv_desc procfs_vnodeop_opv_desc; 16265899Shibler extern struct vnodeopv_desc cd9660_vnodeop_opv_desc; 16365899Shibler extern struct vnodeopv_desc cd9660_specop_opv_desc; 16465899Shibler extern struct vnodeopv_desc cd9660_fifoop_opv_desc; 16565937Spendry extern struct vnodeopv_desc union_vnodeop_opv_desc; 16653579Sheideman 16753579Sheideman struct vnodeopv_desc *vfs_opv_descs[] = { 16853579Sheideman &ffs_vnodeop_opv_desc, 16953579Sheideman &ffs_specop_opv_desc, 17054343Smckusick #ifdef FIFO 17153579Sheideman &ffs_fifoop_opv_desc, 17254343Smckusick #endif 17353760Smckusick &dead_vnodeop_opv_desc, 17454343Smckusick #ifdef FIFO 17553760Smckusick &fifo_vnodeop_opv_desc, 17654343Smckusick #endif 17753760Smckusick &spec_vnodeop_opv_desc, 17853760Smckusick #ifdef LFS 17953579Sheideman &lfs_vnodeop_opv_desc, 18053579Sheideman &lfs_specop_opv_desc, 18154343Smckusick #ifdef FIFO 18253579Sheideman &lfs_fifoop_opv_desc, 18353760Smckusick #endif 18454343Smckusick #endif 18553760Smckusick #ifdef MFS 18653579Sheideman &mfs_vnodeop_opv_desc, 18753760Smckusick #endif 18853760Smckusick #ifdef NFS 18953579Sheideman &nfsv2_vnodeop_opv_desc, 19053579Sheideman &spec_nfsv2nodeop_opv_desc, 19154343Smckusick #ifdef FIFO 19253579Sheideman &fifo_nfsv2nodeop_opv_desc, 19353760Smckusick #endif 19454343Smckusick #endif 19553943Spendry #ifdef FDESC 19653943Spendry &fdesc_vnodeop_opv_desc, 19753943Spendry #endif 19853943Spendry #ifdef PORTAL 19953943Spendry &portal_vnodeop_opv_desc, 20053943Spendry #endif 20154989Sheideman #ifdef NULLFS 20254989Sheideman &null_vnodeop_opv_desc, 20354989Sheideman #endif 20454989Sheideman #ifdef UMAPFS 20554989Sheideman &umap_vnodeop_opv_desc, 20654989Sheideman #endif 20755336Spendry #ifdef KERNFS 20855336Spendry &kernfs_vnodeop_opv_desc, 20955336Spendry #endif 21065147Spendry #ifdef PROCFS 21165147Spendry &procfs_vnodeop_opv_desc, 21265147Spendry #endif 21365897Shibler #ifdef CD9660 21465899Shibler &cd9660_vnodeop_opv_desc, 21565899Shibler &cd9660_specop_opv_desc, 21665669Shibler #ifdef FIFO 21765899Shibler &cd9660_fifoop_opv_desc, 21865669Shibler #endif 21965669Shibler #endif 22065937Spendry #ifdef UNION 22165937Spendry &union_vnodeop_opv_desc, 22265937Spendry #endif 22353579Sheideman NULL 22453579Sheideman }; 225