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