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