1 /*	$NetBSD: fstypes.h,v 1.33 2015/05/06 15:57:08 hannken Exp $	*/
2 
3 /*
4  * Copyright (c) 1989, 1991, 1993
5  *	The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *	@(#)mount.h	8.21 (Berkeley) 5/20/95
32  */
33 
34 #ifndef _SYS_FSTYPES_H_
35 #define	_SYS_FSTYPES_H_
36 
37 typedef struct { int32_t __fsid_val[2]; } fsid_t; /* file system id type */
38 
39 #if defined(_KERNEL)
40 /*
41  * File identifier.
42  * These are unique per filesystem on a single machine.
43  */
44 struct fid {
45 	unsigned short	fid_len;		/* length of data in bytes */
46 	unsigned short	fid_reserved;		/* compat: historic align */
47 	char		fid_data[0];		/* data (variable length) */
48 };
49 
50 /*
51  * Generic file handle
52  */
53 struct fhandle {
54 	fsid_t	fh_fsid;	/* File system id of mount point */
55 	struct	fid fh_fid;	/* File sys specific id */
56 };
57 typedef struct fhandle	fhandle_t;
58 
59 /*
60  * FHANDLE_SIZE_MAX: arbitrary value to prevent unreasonable allocation.
61  *
62  * FHANDLE_SIZE_MIN: chosen for compatibility.  smaller handles are zero-padded.
63  */
64 
65 #define	FHANDLE_SIZE_COMPAT	28
66 #define	FHANDLE_SIZE_MAX	1024
67 #define	FHANDLE_SIZE_MIN	FHANDLE_SIZE_COMPAT
68 
69 #define	FHANDLE_FSID(fh)	(&(fh)->fh_fsid)
70 #define	FHANDLE_FILEID(fh)	(&(fh)->fh_fid)
71 #define	FHANDLE_SIZE_FROM_FILEID_SIZE(fidsize) \
72 	MAX(FHANDLE_SIZE_MIN, (offsetof(fhandle_t, fh_fid) + (fidsize)))
73 #define	FHANDLE_SIZE(fh) \
74 	FHANDLE_SIZE_FROM_FILEID_SIZE(FHANDLE_FILEID(fh)->fid_len)
75 #endif /* defined(_KERNEL) */
76 
77 /*
78  * Mount flags.  XXX BEWARE: these are not in numerical order!
79  *
80  * Unmount uses MNT_FORCE flag.
81  *
82  * Note that all mount flags are listed here.  if you need to add one, take
83  * one of the __MNT_UNUSED flags.
84  */
85 
86 #define	__MNT_UNUSED1	0x00200000
87 
88 #define	MNT_RDONLY	0x00000001	/* read only filesystem */
89 #define	MNT_SYNCHRONOUS	0x00000002	/* file system written synchronously */
90 #define	MNT_NOEXEC	0x00000004	/* can't exec from filesystem */
91 #define	MNT_NOSUID	0x00000008	/* don't honor setuid bits on fs */
92 #define	MNT_NODEV	0x00000010	/* don't interpret special files */
93 #define	MNT_UNION	0x00000020	/* union with underlying filesystem */
94 #define	MNT_ASYNC	0x00000040	/* file system written asynchronously */
95 #define	MNT_NOCOREDUMP	0x00008000	/* don't write core dumps to this FS */
96 #define	MNT_RELATIME	0x00020000	/* only update access time if mod/ch */
97 #define	MNT_IGNORE	0x00100000	/* don't show entry in df */
98 #define	MNT_DISCARD	0x00800000	/* use DISCARD/TRIM if supported */
99 #define	MNT_EXTATTR	0x01000000	/* enable extended attributes */
100 #define	MNT_LOG		0x02000000	/* Use logging */
101 #define	MNT_NOATIME	0x04000000	/* Never update access times in fs */
102 #define	MNT_SYMPERM	0x20000000	/* recognize symlink permission */
103 #define	MNT_NODEVMTIME	0x40000000	/* Never update mod times for devs */
104 #define	MNT_SOFTDEP	0x80000000	/* Use soft dependencies */
105 
106 #define	__MNT_BASIC_FLAGS \
107 	{ MNT_ASYNC,		0,	"asynchronous" }, \
108 	{ MNT_DISCARD,		0,	"discard" }, \
109 	{ MNT_EXTATTR,		0,	"extattr" }, \
110 	{ MNT_IGNORE,		0,	"hidden" }, \
111 	{ MNT_LOG,		0,	"log" }, \
112 	{ MNT_NOATIME,		0,	"noatime" }, \
113 	{ MNT_NOCOREDUMP,	0,	"nocoredump" }, \
114 	{ MNT_NODEV,		0,	"nodev" }, \
115 	{ MNT_NODEVMTIME,	0,	"nodevmtime" }, \
116 	{ MNT_NOEXEC,		0,	"noexec" }, \
117 	{ MNT_NOSUID,		0,	"nosuid" }, \
118 	{ MNT_RDONLY,		0,	"read-only" }, \
119 	{ MNT_RELATIME,		0,	"relatime" }, \
120 	{ MNT_SOFTDEP,		0,	"soft dependencies" }, \
121 	{ MNT_SYMPERM,		0,	"symperm" }, \
122 	{ MNT_SYNCHRONOUS,	0,	"synchronous" }, \
123 	{ MNT_UNION,		0,	"union" }, \
124 
125 #define MNT_BASIC_FLAGS (MNT_ASYNC | MNT_DISCARD | MNT_EXTATTR | MNT_LOG | \
126     MNT_NOATIME | MNT_NOCOREDUMP | MNT_NODEV | MNT_NODEVMTIME | MNT_NOEXEC | \
127     MNT_NOSUID | MNT_RDONLY | MNT_RELATIME | MNT_SOFTDEP | MNT_SYMPERM | \
128     MNT_SYNCHRONOUS | MNT_UNION)
129 /*
130  * exported mount flags.
131  */
132 #define	MNT_EXRDONLY	0x00000080	/* exported read only */
133 #define	MNT_EXPORTED	0x00000100	/* file system is exported */
134 #define	MNT_DEFEXPORTED	0x00000200	/* exported to the world */
135 #define	MNT_EXPORTANON	0x00000400	/* use anon uid mapping for everyone */
136 #define	MNT_EXKERB	0x00000800	/* exported with Kerberos uid mapping */
137 #define	MNT_EXNORESPORT	0x08000000	/* don't enforce reserved ports (NFS) */
138 #define	MNT_EXPUBLIC	0x10000000	/* public export (WebNFS) */
139 
140 #define	__MNT_EXPORTED_FLAGS \
141 	{ MNT_EXRDONLY,		1,	"exported read-only" }, \
142 	{ MNT_EXPORTED,		0,	"NFS exported" }, \
143 	{ MNT_DEFEXPORTED,	1,	"exported to the world" }, \
144 	{ MNT_EXPORTANON,	1,	"anon uid mapping" }, \
145 	{ MNT_EXKERB,		1,	"kerberos uid mapping" }, \
146 	{ MNT_EXNORESPORT,	0,	"non-reserved ports" }, \
147 	{ MNT_EXPUBLIC,		0,	"WebNFS exports" },
148 
149 /*
150  * Flags set by internal operations.
151  */
152 #define	MNT_LOCAL	0x00001000	/* filesystem is stored locally */
153 #define	MNT_QUOTA	0x00002000	/* quotas are enabled on filesystem */
154 #define	MNT_ROOTFS	0x00004000	/* identifies the root filesystem */
155 
156 #define	__MNT_INTERNAL_FLAGS \
157 	{ MNT_LOCAL,		0,	"local" }, \
158 	{ MNT_QUOTA,		0,	"with quotas" }, \
159 	{ MNT_ROOTFS,		1,	"root file system" },
160 
161 /*
162  * Mask of flags that are visible to statvfs()
163  */
164 #define	MNT_VISFLAGMASK	( \
165      MNT_RDONLY | \
166      MNT_SYNCHRONOUS | \
167      MNT_NOEXEC | \
168      MNT_NOSUID | \
169      MNT_NODEV | \
170      MNT_UNION | \
171      MNT_ASYNC | \
172      MNT_NOCOREDUMP | \
173      MNT_IGNORE | \
174      MNT_DISCARD | \
175      MNT_NOATIME | \
176      MNT_SYMPERM | \
177      MNT_NODEVMTIME | \
178      MNT_SOFTDEP | \
179      MNT_EXRDONLY | \
180      MNT_EXPORTED | \
181      MNT_DEFEXPORTED | \
182      MNT_EXPORTANON | \
183      MNT_EXKERB | \
184      MNT_EXNORESPORT | \
185      MNT_EXPUBLIC | \
186      MNT_LOCAL | \
187      MNT_QUOTA | \
188      MNT_ROOTFS | \
189      MNT_LOG | \
190      MNT_EXTATTR)
191 
192 /*
193  * External filesystem control flags.
194  */
195 #define	MNT_UPDATE	0x00010000	/* not a real mount, just an update */
196 #define	MNT_RELOAD	0x00040000	/* reload filesystem data */
197 #define	MNT_FORCE	0x00080000	/* force unmount or readonly change */
198 #define	MNT_GETARGS	0x00400000	/* retrieve file system specific args */
199 
200 #define	MNT_OP_FLAGS	(MNT_UPDATE|MNT_RELOAD|MNT_FORCE|MNT_GETARGS)
201 
202 #define	__MNT_EXTERNAL_FLAGS \
203 	{ MNT_UPDATE,		1,	"being updated" }, \
204 	{ MNT_RELOAD,		1,	"reload filesystem data" }, \
205 	{ MNT_FORCE,		1,	"force unmount or readonly change" }, \
206 	{ MNT_GETARGS,		1,	"retrieve mount arguments" },
207 
208 /*
209  * Internal filesystem control flags.
210  * These are set in struct mount mnt_iflag.
211  *
212  * IMNT_UNMOUNT locks the mount entry so that name lookup cannot proceed
213  * past the mount point.  This keeps the subtree stable during mounts
214  * and unmounts.
215  */
216 #define	IMNT_GONE	0x00000001	/* filesystem is gone.. */
217 #define	IMNT_UNMOUNT	0x00000002	/* unmount in progress */
218 #define	IMNT_WANTRDWR	0x00000004	/* upgrade to read/write requested */
219 #define	IMNT_DTYPE	0x00000040	/* returns d_type fields */
220 #define	IMNT_HAS_TRANS	0x00000080	/* supports transactions */
221 #define	IMNT_MPSAFE	0x00000100	/* file system code MP safe */
222 #define	IMNT_CAN_RWTORO	0x00000200	/* can downgrade fs to from rw to r/o */
223 #define	IMNT_ONWORKLIST	0x00000400	/* on syncer worklist */
224 
225 #define	__MNT_FLAGS \
226 	__MNT_BASIC_FLAGS \
227 	__MNT_EXPORTED_FLAGS \
228 	__MNT_INTERNAL_FLAGS \
229 	__MNT_EXTERNAL_FLAGS
230 
231 #define	__MNT_FLAG_BITS \
232 	"\20" \
233 	"\40MNT_SOFTDEP" \
234 	"\37MNT_NODEVMTIME" \
235 	"\36MNT_SYMPERM" \
236 	"\35MNT_EXPUBLIC" \
237 	"\34MNT_EXNORESPORT" \
238 	"\33MNT_NOATIME" \
239 	"\32MNT_LOG" \
240 	"\31MNT_EXTATTR" \
241 	"\30MNT_DISCARD" \
242 	"\27MNT_GETARGS" \
243 	"\26MNT_UNUSED" \
244 	"\25MNT_IGNORE" \
245 	"\24MNT_FORCE" \
246 	"\23MNT_RELOAD" \
247 	"\22MNT_RELATIME" \
248 	"\21MNT_UPDATE" \
249 	"\20MNT_NOCOREDUMP" \
250 	"\17MNT_ROOTFS" \
251 	"\16MNT_QUOTA" \
252 	"\15MNT_LOCAL" \
253 	"\14MNT_EXKERB" \
254 	"\13MNT_EXPORTANON" \
255 	"\12MNT_DEFEXPORTED" \
256 	"\11MNT_EXPORTED" \
257 	"\10MNT_EXRDONLY" \
258 	"\07MNT_ASYNC" \
259 	"\06MNT_UNION" \
260 	"\05MNT_NODEV" \
261 	"\04MNT_NOSUID" \
262 	"\03MNT_NOEXEC" \
263 	"\02MNT_SYNCHRONOUS" \
264 	"\01MNT_RDONLY"
265 
266 #define	__IMNT_FLAG_BITS \
267 	"\20" \
268 	"\13IMNT_ONWORKLIST" \
269 	"\12IMNT_CAN_RWTORO" \
270         "\11IMNT_MPSAFE" \
271 	"\10IMNT_HAS_TRANS" \
272 	"\07IMNT_DTYPE" \
273 	"\03IMNT_WANTRDWR" \
274 	"\02IMNT_UNMOUNT" \
275 	"\01IMNT_GONE"
276 
277 /*
278  * Flags for various system call interfaces.
279  *
280  * waitfor flags to vfs_sync() and getvfsstat()
281  */
282 #define	MNT_WAIT	1	/* synchronously wait for I/O to complete */
283 #define	MNT_NOWAIT	2	/* start all I/O, but do not wait for it */
284 #define	MNT_LAZY 	3	/* push data not written by filesystem syncer */
285 #endif /* _SYS_FSTYPES_H_ */
286