Annotation of src/sys/sys/fstypes.h, Revision 1.33.2.2
1.33.2.2! pgoyette 1: /* $NetBSD: fstypes.h,v 1.35 2017/03/01 10:44:47 hannken Exp $ */
1.1 christos 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_
1.25 simonb 35: #define _SYS_FSTYPES_H_
1.1 christos 36:
37: typedef struct { int32_t __fsid_val[2]; } fsid_t; /* file system id type */
38:
1.13 martin 39: #if defined(_KERNEL)
1.1 christos 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 */
1.20 pooka 46: unsigned short fid_reserved; /* compat: historic align */
1.26 gmcgarry 47: char fid_data[0]; /* data (variable length) */
1.1 christos 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:
1.12 yamt 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:
1.14 yamt 65: #define FHANDLE_SIZE_COMPAT 28
1.12 yamt 66: #define FHANDLE_SIZE_MAX 1024
1.14 yamt 67: #define FHANDLE_SIZE_MIN FHANDLE_SIZE_COMPAT
1.12 yamt 68:
1.10 yamt 69: #define FHANDLE_FSID(fh) (&(fh)->fh_fsid)
70: #define FHANDLE_FILEID(fh) (&(fh)->fh_fid)
1.12 yamt 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)
1.10 yamt 75: #endif /* defined(_KERNEL) */
76:
1.1 christos 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:
1.30 christos 86: #define __MNT_UNUSED1 0x00200000
1.1 christos 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 */
1.30 christos 96: #define MNT_RELATIME 0x00020000 /* only update access time if mod/ch */
1.25 simonb 97: #define MNT_IGNORE 0x00100000 /* don't show entry in df */
1.31 drochner 98: #define MNT_DISCARD 0x00800000 /* use DISCARD/TRIM if supported */
1.29 manu 99: #define MNT_EXTATTR 0x01000000 /* enable extended attributes */
1.24 simonb 100: #define MNT_LOG 0x02000000 /* Use logging */
1.25 simonb 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 */
1.1 christos 105:
1.25 simonb 106: #define __MNT_BASIC_FLAGS \
1.1 christos 107: { MNT_ASYNC, 0, "asynchronous" }, \
1.31 drochner 108: { MNT_DISCARD, 0, "discard" }, \
1.30 christos 109: { MNT_EXTATTR, 0, "extattr" }, \
1.1 christos 110: { MNT_IGNORE, 0, "hidden" }, \
1.30 christos 111: { MNT_LOG, 0, "log" }, \
1.1 christos 112: { MNT_NOATIME, 0, "noatime" }, \
1.30 christos 113: { MNT_NOCOREDUMP, 0, "nocoredump" }, \
114: { MNT_NODEV, 0, "nodev" }, \
1.1 christos 115: { MNT_NODEVMTIME, 0, "nodevmtime" }, \
1.30 christos 116: { MNT_NOEXEC, 0, "noexec" }, \
117: { MNT_NOSUID, 0, "nosuid" }, \
118: { MNT_RDONLY, 0, "read-only" }, \
119: { MNT_RELATIME, 0, "relatime" }, \
1.24 simonb 120: { MNT_SOFTDEP, 0, "soft dependencies" }, \
1.30 christos 121: { MNT_SYMPERM, 0, "symperm" }, \
122: { MNT_SYNCHRONOUS, 0, "synchronous" }, \
123: { MNT_UNION, 0, "union" }, \
1.1 christos 124:
1.31 drochner 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 | \
1.30 christos 128: MNT_SYNCHRONOUS | MNT_UNION)
1.1 christos 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 */
1.25 simonb 137: #define MNT_EXNORESPORT 0x08000000 /* don't enforce reserved ports (NFS) */
138: #define MNT_EXPUBLIC 0x10000000 /* public export (WebNFS) */
1.1 christos 139:
1.25 simonb 140: #define __MNT_EXPORTED_FLAGS \
1.1 christos 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:
1.25 simonb 156: #define __MNT_INTERNAL_FLAGS \
1.1 christos 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: */
1.5 christos 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 | \
1.32 drochner 174: MNT_DISCARD | \
1.5 christos 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 | \
1.24 simonb 188: MNT_ROOTFS | \
1.29 manu 189: MNT_LOG | \
190: MNT_EXTATTR)
1.1 christos 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:
1.17 yamt 200: #define MNT_OP_FLAGS (MNT_UPDATE|MNT_RELOAD|MNT_FORCE|MNT_GETARGS)
201:
1.25 simonb 202: #define __MNT_EXTERNAL_FLAGS \
1.1 christos 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 */
1.33.2.2! pgoyette 219: #define IMNT_WANTRDONLY 0x00000008 /* upgrade to readonly requested */
1.3 mycroft 220: #define IMNT_DTYPE 0x00000040 /* returns d_type fields */
1.18 hannken 221: #define IMNT_HAS_TRANS 0x00000080 /* supports transactions */
1.21 ad 222: #define IMNT_MPSAFE 0x00000100 /* file system code MP safe */
1.28 pooka 223: #define IMNT_CAN_RWTORO 0x00000200 /* can downgrade fs to from rw to r/o */
1.33 hannken 224: #define IMNT_ONWORKLIST 0x00000400 /* on syncer worklist */
1.1 christos 225:
1.25 simonb 226: #define __MNT_FLAGS \
1.1 christos 227: __MNT_BASIC_FLAGS \
228: __MNT_EXPORTED_FLAGS \
229: __MNT_INTERNAL_FLAGS \
230: __MNT_EXTERNAL_FLAGS
231:
1.25 simonb 232: #define __MNT_FLAG_BITS \
1.1 christos 233: "\20" \
234: "\40MNT_SOFTDEP" \
235: "\37MNT_NODEVMTIME" \
236: "\36MNT_SYMPERM" \
237: "\35MNT_EXPUBLIC" \
238: "\34MNT_EXNORESPORT" \
239: "\33MNT_NOATIME" \
1.24 simonb 240: "\32MNT_LOG" \
1.29 manu 241: "\31MNT_EXTATTR" \
1.31 drochner 242: "\30MNT_DISCARD" \
1.1 christos 243: "\27MNT_GETARGS" \
1.8 chs 244: "\26MNT_UNUSED" \
1.1 christos 245: "\25MNT_IGNORE" \
246: "\24MNT_FORCE" \
247: "\23MNT_RELOAD" \
1.30 christos 248: "\22MNT_RELATIME" \
1.1 christos 249: "\21MNT_UPDATE" \
250: "\20MNT_NOCOREDUMP" \
251: "\17MNT_ROOTFS" \
252: "\16MNT_QUOTA" \
253: "\15MNT_LOCAL" \
254: "\14MNT_EXKERB" \
255: "\13MNT_EXPORTANON" \
256: "\12MNT_DEFEXPORTED" \
257: "\11MNT_EXPORTED" \
258: "\10MNT_EXRDONLY" \
259: "\07MNT_ASYNC" \
260: "\06MNT_UNION" \
261: "\05MNT_NODEV" \
262: "\04MNT_NOSUID" \
263: "\03MNT_NOEXEC" \
264: "\02MNT_SYNCHRONOUS" \
265: "\01MNT_RDONLY"
266:
1.25 simonb 267: #define __IMNT_FLAG_BITS \
1.1 christos 268: "\20" \
1.33 hannken 269: "\13IMNT_ONWORKLIST" \
1.28 pooka 270: "\12IMNT_CAN_RWTORO" \
1.33.2.1 pgoyette 271: "\11IMNT_MPSAFE" \
1.18 hannken 272: "\10IMNT_HAS_TRANS" \
1.3 mycroft 273: "\07IMNT_DTYPE" \
1.33.2.2! pgoyette 274: "\04IMNT_WANTRDONLY" \
1.1 christos 275: "\03IMNT_WANTRDWR" \
276: "\02IMNT_UNMOUNT" \
277: "\01IMNT_GONE"
278:
279: /*
280: * Flags for various system call interfaces.
281: *
282: * waitfor flags to vfs_sync() and getvfsstat()
283: */
1.25 simonb 284: #define MNT_WAIT 1 /* synchronously wait for I/O to complete */
285: #define MNT_NOWAIT 2 /* start all I/O, but do not wait for it */
286: #define MNT_LAZY 3 /* push data not written by filesystem syncer */
1.1 christos 287: #endif /* _SYS_FSTYPES_H_ */
CVSweb <webmaster@jp.NetBSD.org>