4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 1988 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #pragma ident "%Z%%M% %I% %E% SMI"
30 * File system identifier. Should be unique (at least per machine).
37 long val
[2]; /* file system id type */
41 * File identifier. Should be unique per filesystem on a single machine.
44 #define freefid(fidp) \
45 kmem_free((caddr_t)(fidp), sizeof (struct fid) - MAXFIDSZ + (fidp)->fid_len)
48 u_short fid_len
; /* length of data in bytes */
49 char fid_data
[MAXFIDSZ
]; /* data (variable length) */
53 * Structure per mounted file system.
54 * Each mounted file system has an array of
55 * operations and an instance record.
56 * The file systems are put on a singly linked list.
57 * If vfs_stats is non-NULL statistics are gathered, see vfs_stat.h
60 struct vfs
*vfs_next
; /* next vfs in vfs list */
61 struct vfsops
*vfs_op
; /* operations on vfs */
62 struct vnode
*vfs_vnodecovered
; /* vnode we mounted on */
63 int vfs_flag
; /* flags */
64 int vfs_bsize
; /* native block size */
65 fsid_t vfs_fsid
; /* file system id */
66 caddr_t vfs_stats
; /* filesystem statistics */
67 caddr_t vfs_data
; /* private data */
72 * VFS_MLOCK lock the vfs so that name lookup cannot proceed past the vfs.
73 * This keeps the subtree stable during mounts and unmounts.
75 #define VFS_RDONLY 0x01 /* read only vfs */
76 #define VFS_MLOCK 0x02 /* lock vfs so that subtree is stable */
77 #define VFS_MWAIT 0x04 /* someone is waiting for lock */
78 #define VFS_NOSUID 0x08 /* turn off set-uid on exec */
79 #define VFS_GRPID 0x10 /* Old BSD group-id on create */
80 #define VFS_NOSUB 0x20 /* No mounts allowed beneath this fs */
81 #define VFS_REMOUNT 0x40 /* modify mount otions only */
82 #define VFS_MULTI 0x80 /* Do multi-component lookup on files */
85 * Operations supported on virtual file system.
88 int (*vfs_mount
)(); /* mount file system */
89 int (*vfs_unmount
)(); /* unmount file system */
90 int (*vfs_root
)(); /* get root vnode */
91 int (*vfs_statfs
)(); /* get fs statistics */
92 int (*vfs_sync
)(); /* flush fs buffers */
93 int (*vfs_vget
)(); /* get vnode from fid */
94 int (*vfs_mountroot
)(); /* mount the root filesystem */
95 int (*vfs_swapvp
)(); /* return vnode for swap */
98 #define VFS_MOUNT(VFSP, PATH, DATA) \
99 (*(VFSP)->vfs_op->vfs_mount)(VFSP, PATH, DATA)
100 #define VFS_UNMOUNT(VFSP) (*(VFSP)->vfs_op->vfs_unmount)(VFSP)
101 #define VFS_ROOT(VFSP, VPP) (*(VFSP)->vfs_op->vfs_root)(VFSP,VPP)
102 #define VFS_STATFS(VFSP, SBP) (*(VFSP)->vfs_op->vfs_statfs)(VFSP,SBP)
103 #define VFS_SYNC(VFSP) (*(VFSP)->vfs_op->vfs_sync)(VFSP)
104 #define VFS_VGET(VFSP, VPP, FIDP) (*(VFSP)->vfs_op->vfs_vget)(VFSP, VPP, FIDP)
105 #define VFS_MOUNTROOT(VFSP, VPP, NM) \
106 (*(VFSP)->vfs_op->vfs_mountroot)(VFSP, VPP, NM)
107 #define VFS_SWAPVP(VFSP, VPP, NM) (*(VFSP)->vfs_op->vfs_swapvp)(VFSP, VPP, NM)
110 * file system statistics
113 long f_type
; /* type of info, zero for now */
114 long f_bsize
; /* fundamental file system block size */
115 long f_blocks
; /* total blocks in file system */
116 long f_bfree
; /* free block in fs */
117 long f_bavail
; /* free blocks avail to non-superuser */
118 long f_files
; /* total file nodes in file system */
119 long f_ffree
; /* free file nodes in fs */
120 fsid_t f_fsid
; /* file system id */
121 long f_spare
[7]; /* spare for later */
126 * Filesystem type switch table
129 char *vsw_name
; /* type name string */
130 struct vfsops
*vsw_ops
; /* filesystem operations vector */
136 extern void vfs_mountroot(); /* mount the root */
137 extern int vfs_add(); /* add a new vfs to mounted vfs list */
138 extern void vfs_remove(); /* remove a vfs from mounted vfs list */
139 extern int vfs_lock(); /* lock a vfs */
140 extern void vfs_unlock(); /* unlock a vfs */
141 extern struct vfs
*getvfs(); /* return vfs given fsid */
142 extern struct vfssw
*getfstype(); /* find default filesystem type */
143 extern int vfs_getmajor(); /* get major device # for an fs type */
144 extern void vfs_putmajor(); /* free major device # for an fs type */
145 extern int vfs_getnum(); /* get device # for an fs type */
146 extern void vfs_putnum(); /* release device # for an fs type */
148 #define VFS_INIT(VFSP, OP, DATA) { \
149 (VFSP)->vfs_next = (struct vfs *)0; \
150 (VFSP)->vfs_op = (OP); \
151 (VFSP)->vfs_flag = 0; \
152 (VFSP)->vfs_stats = NULL; \
153 (VFSP)->vfs_data = (DATA); \
159 extern struct vfs
*rootvfs
; /* ptr to root vfs structure */
160 extern struct vfssw vfssw
[]; /* table of filesystem types */
161 extern struct vfssw
*vfsNVFS
; /* vfs switch table end marker */
164 #endif /*!_sys_vfs_h*/