xref: /netbsd/sys/sys/fstypes.h (revision 0cea7c3a)
1 /*	$NetBSD: fstypes.h,v 1.41 2021/09/18 03:05:20 christos 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 
87 #define	MNT_RDONLY	0x00000001	/* read only filesystem */
88 #define	MNT_SYNCHRONOUS	0x00000002	/* file system written synchronously */
89 #define	MNT_NOEXEC	0x00000004	/* can't exec from filesystem */
90 #define	MNT_NOSUID	0x00000008	/* don't honor setuid bits on fs */
91 #define	MNT_NODEV	0x00000010	/* don't interpret special files */
92 #define	MNT_UNION	0x00000020	/* union with underlying filesystem */
93 #define	MNT_ASYNC	0x00000040	/* file system written asynchronously */
94 #define	MNT_NOCOREDUMP	0x00008000	/* don't write core dumps to this FS */
95 #define	MNT_RELATIME	0x00020000	/* only update access time if mod/ch */
96 #define	MNT_IGNORE	0x00100000	/* don't show entry in df */
97 #define	MNT_NFS4ACLS	0x00200000	/* uses NFS4 Access Control Lists */
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_AUTOMOUNTED 0x10000000	/* mounted by automountd(8) */
103 #define	MNT_SYMPERM	0x20000000	/* recognize symlink permission */
104 #define	MNT_NODEVMTIME	0x40000000	/* Never update mod times for devs */
105 #define	MNT_SOFTDEP	0x80000000	/* Use soft dependencies */
106 #define	MNT_POSIX1EACLS	0x00000800	/* shared with EXKERB */
107 #define	MNT_ACLS	MNT_POSIX1EACLS	/* synonym */
108 
109 #define	__MNT_BASIC_FLAGS \
110 	{ MNT_ASYNC,		0,	"asynchronous" }, \
111 	{ MNT_AUTOMOUNTED,	0,	"automounted" }, \
112 	{ MNT_NFS4ACLS,		0,	"nfs4acls" }, \
113 	{ MNT_POSIX1EACLS,	0,	"posix1eacls" }, \
114 	{ MNT_DISCARD,		0,	"discard" }, \
115 	{ MNT_EXTATTR,		0,	"extattr" }, \
116 	{ MNT_IGNORE,		0,	"hidden" }, \
117 	{ MNT_LOG,		0,	"log" }, \
118 	{ MNT_NOATIME,		0,	"noatime" }, \
119 	{ MNT_NOCOREDUMP,	0,	"nocoredump" }, \
120 	{ MNT_NODEV,		0,	"nodev" }, \
121 	{ MNT_NODEVMTIME,	0,	"nodevmtime" }, \
122 	{ MNT_NOEXEC,		0,	"noexec" }, \
123 	{ MNT_NOSUID,		0,	"nosuid" }, \
124 	{ MNT_RDONLY,		0,	"read-only" }, \
125 	{ MNT_RELATIME,		0,	"relatime" }, \
126 	{ MNT_SOFTDEP,		0,	"soft dependencies" }, \
127 	{ MNT_SYMPERM,		0,	"symperm" }, \
128 	{ MNT_SYNCHRONOUS,	0,	"synchronous" }, \
129 	{ MNT_UNION,		0,	"union" }, \
130 
131 #define MNT_BASIC_FLAGS (MNT_ASYNC | MNT_AUTOMOUNTED | MNT_DISCARD | \
132     MNT_EXTATTR | MNT_LOG | MNT_NOATIME | MNT_NOCOREDUMP | MNT_NODEV | \
133     MNT_NODEVMTIME | MNT_NOEXEC | MNT_NOSUID | MNT_RDONLY | MNT_RELATIME | \
134     MNT_SOFTDEP | MNT_SYMPERM | MNT_SYNCHRONOUS | MNT_UNION | MNT_NFS4ACLS | \
135     MNT_POSIX1EACLS)
136 /*
137  * exported mount flags.
138  */
139 #define	MNT_EXRDONLY	0x00000080	/* exported read only */
140 #define	MNT_EXPORTED	0x00000100	/* file system is exported */
141 #define	MNT_DEFEXPORTED	0x00000200	/* exported to the world */
142 #define	MNT_EXPORTANON	0x00000400	/* use anon uid mapping for everyone */
143 #define	MNT_EXKERB	0x00000800	/* exported with Kerberos uid mapping */
144 #define	MNT_EXNORESPORT	0x08000000	/* don't enforce reserved ports (NFS) */
145 #define	MNT_EXPUBLIC	0x10000000	/* public export (WebNFS) */
146 
147 #define	__MNT_EXPORTED_FLAGS \
148 	{ MNT_EXRDONLY,		1,	"exported read-only" }, \
149 	{ MNT_EXPORTED,		0,	"NFS exported" }, \
150 	{ MNT_DEFEXPORTED,	1,	"exported to the world" }, \
151 	{ MNT_EXPORTANON,	1,	"anon uid mapping" }, \
152 	{ MNT_EXKERB,		1,	"kerberos uid mapping/posix1e ACLS" }, \
153 	{ MNT_EXNORESPORT,	0,	"non-reserved ports" }, \
154 	{ MNT_EXPUBLIC,		0,	"WebNFS exports" },
155 
156 /*
157  * Flags set by internal operations.
158  */
159 #define	MNT_LOCAL	0x00001000	/* filesystem is stored locally */
160 #define	MNT_QUOTA	0x00002000	/* quotas are enabled on filesystem */
161 #define	MNT_ROOTFS	0x00004000	/* identifies the root filesystem */
162 
163 #define	__MNT_INTERNAL_FLAGS \
164 	{ MNT_LOCAL,		0,	"local" }, \
165 	{ MNT_QUOTA,		0,	"with quotas" }, \
166 	{ MNT_ROOTFS,		1,	"root file system" },
167 
168 /*
169  * Mask of flags that are visible to statvfs()
170  */
171 #define	MNT_VISFLAGMASK	( \
172      MNT_RDONLY | \
173      MNT_SYNCHRONOUS | \
174      MNT_NOEXEC | \
175      MNT_NOSUID | \
176      MNT_NODEV | \
177      MNT_UNION | \
178      MNT_NFS4ACLS | \
179      MNT_ASYNC | \
180      MNT_NOCOREDUMP | \
181      MNT_IGNORE | \
182      MNT_DISCARD | \
183      MNT_NOATIME | \
184      MNT_SYMPERM | \
185      MNT_NODEVMTIME | \
186      MNT_SOFTDEP | \
187      MNT_EXRDONLY | \
188      MNT_EXPORTED | \
189      MNT_DEFEXPORTED | \
190      MNT_EXPORTANON | \
191      MNT_EXKERB | \
192      MNT_EXNORESPORT | \
193      MNT_EXPUBLIC | \
194      MNT_LOCAL | \
195      MNT_QUOTA | \
196      MNT_ROOTFS | \
197      MNT_LOG | \
198      MNT_POSIX1EACLS | \
199      MNT_EXTATTR | \
200      MNT_AUTOMOUNTED)
201 
202 /*
203  * External filesystem control flags.
204  */
205 #define	MNT_UPDATE	0x00010000	/* not a real mount, just an update */
206 #define	MNT_RELOAD	0x00040000	/* reload filesystem data */
207 #define	MNT_FORCE	0x00080000	/* force unmount or readonly change */
208 #define	MNT_GETARGS	0x00400000	/* retrieve file system specific args */
209 
210 #define	MNT_OP_FLAGS	(MNT_UPDATE|MNT_RELOAD|MNT_FORCE|MNT_GETARGS)
211 
212 #define	__MNT_EXTERNAL_FLAGS \
213 	{ MNT_UPDATE,		1,	"being updated" }, \
214 	{ MNT_RELOAD,		1,	"reload filesystem data" }, \
215 	{ MNT_FORCE,		1,	"force unmount or readonly change" }, \
216 	{ MNT_GETARGS,		1,	"retrieve mount arguments" },
217 
218 /*
219  * Internal filesystem control flags.
220  * These are set in struct mount mnt_iflag.
221  *
222  * IMNT_UNMOUNT locks the mount entry so that name lookup cannot proceed
223  * past the mount point.  This keeps the subtree stable during mounts
224  * and unmounts.
225  */
226 #define	IMNT_GONE	0x00000001	/* filesystem is gone.. */
227 #define	IMNT_UNMOUNT	0x00000002	/* unmount in progress */
228 #define	IMNT_WANTRDWR	0x00000004	/* upgrade to read/write requested */
229 #define	IMNT_WANTRDONLY	0x00000008	/* upgrade to readonly requested */
230 #define	IMNT_NCLOOKUP	0x00000020	/* can do lookop direct in namecache */
231 #define	IMNT_DTYPE	0x00000040	/* returns d_type fields */
232 #define	IMNT_SHRLOOKUP	0x00000080	/* can do LK_SHARED lookups */
233 #define	IMNT_MPSAFE	0x00000100	/* file system code MP safe */
234 #define	IMNT_CAN_RWTORO	0x00000200	/* can downgrade fs to from rw to r/o */
235 #define	IMNT_ONWORKLIST	0x00000400	/* on syncer worklist */
236 
237 #define	__MNT_FLAGS \
238 	__MNT_BASIC_FLAGS \
239 	__MNT_EXPORTED_FLAGS \
240 	__MNT_INTERNAL_FLAGS \
241 	__MNT_EXTERNAL_FLAGS
242 
243 #define	__MNT_FLAG_BITS \
244 	"\20" \
245 	"\40MNT_SOFTDEP" \
246 	"\37MNT_NODEVMTIME" \
247 	"\36MNT_SYMPERM" \
248 	"\35MNT_EXPUBLIC" \
249 	"\34MNT_EXNORESPORT" \
250 	"\33MNT_NOATIME" \
251 	"\32MNT_LOG" \
252 	"\31MNT_EXTATTR" \
253 	"\30MNT_DISCARD" \
254 	"\27MNT_GETARGS" \
255 	"\26MNT_NFS4ACLS" \
256 	"\25MNT_IGNORE" \
257 	"\24MNT_FORCE" \
258 	"\23MNT_RELOAD" \
259 	"\22MNT_RELATIME" \
260 	"\21MNT_UPDATE" \
261 	"\20MNT_NOCOREDUMP" \
262 	"\17MNT_ROOTFS" \
263 	"\16MNT_QUOTA" \
264 	"\15MNT_LOCAL" \
265 	"\14MNT_EXKERB|MNT_POSIX1EACLS" \
266 	"\13MNT_EXPORTANON" \
267 	"\12MNT_DEFEXPORTED" \
268 	"\11MNT_EXPORTED" \
269 	"\10MNT_EXRDONLY" \
270 	"\07MNT_ASYNC" \
271 	"\06MNT_UNION" \
272 	"\05MNT_NODEV" \
273 	"\04MNT_NOSUID" \
274 	"\03MNT_NOEXEC" \
275 	"\02MNT_SYNCHRONOUS" \
276 	"\01MNT_RDONLY"
277 
278 #define	__IMNT_FLAG_BITS \
279 	"\20" \
280 	"\13IMNT_ONWORKLIST" \
281 	"\12IMNT_CAN_RWTORO" \
282 	"\11IMNT_MPSAFE" \
283 	"\10IMNT_SHRLOOKUP" \
284 	"\07IMNT_DTYPE" \
285 	"\06IMNT_NCLOOKUP" \
286 	"\04IMNT_WANTRDONLY" \
287 	"\03IMNT_WANTRDWR" \
288 	"\02IMNT_UNMOUNT" \
289 	"\01IMNT_GONE"
290 
291 /*
292  * Flags for various system call interfaces.
293  *
294  * waitfor flags to vfs_sync() and getvfsstat()
295  */
296 #define	MNT_WAIT	1	/* synchronously wait for I/O to complete */
297 #define	MNT_NOWAIT	2	/* start all I/O, but do not wait for it */
298 #define	MNT_LAZY 	3	/* push data not written by filesystem syncer */
299 #endif /* _SYS_FSTYPES_H_ */
300