1*0cea7c3aSchristos /* $NetBSD: fstypes.h,v 1.41 2021/09/18 03:05:20 christos Exp $ */ 26bd1d6d4Schristos 36bd1d6d4Schristos /* 46bd1d6d4Schristos * Copyright (c) 1989, 1991, 1993 56bd1d6d4Schristos * The Regents of the University of California. All rights reserved. 66bd1d6d4Schristos * 76bd1d6d4Schristos * Redistribution and use in source and binary forms, with or without 86bd1d6d4Schristos * modification, are permitted provided that the following conditions 96bd1d6d4Schristos * are met: 106bd1d6d4Schristos * 1. Redistributions of source code must retain the above copyright 116bd1d6d4Schristos * notice, this list of conditions and the following disclaimer. 126bd1d6d4Schristos * 2. Redistributions in binary form must reproduce the above copyright 136bd1d6d4Schristos * notice, this list of conditions and the following disclaimer in the 146bd1d6d4Schristos * documentation and/or other materials provided with the distribution. 156bd1d6d4Schristos * 3. Neither the name of the University nor the names of its contributors 166bd1d6d4Schristos * may be used to endorse or promote products derived from this software 176bd1d6d4Schristos * without specific prior written permission. 186bd1d6d4Schristos * 196bd1d6d4Schristos * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 206bd1d6d4Schristos * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 216bd1d6d4Schristos * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 226bd1d6d4Schristos * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 236bd1d6d4Schristos * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 246bd1d6d4Schristos * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 256bd1d6d4Schristos * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 266bd1d6d4Schristos * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 276bd1d6d4Schristos * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 286bd1d6d4Schristos * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 296bd1d6d4Schristos * SUCH DAMAGE. 306bd1d6d4Schristos * 316bd1d6d4Schristos * @(#)mount.h 8.21 (Berkeley) 5/20/95 326bd1d6d4Schristos */ 336bd1d6d4Schristos 346bd1d6d4Schristos #ifndef _SYS_FSTYPES_H_ 356bd1d6d4Schristos #define _SYS_FSTYPES_H_ 366bd1d6d4Schristos 376bd1d6d4Schristos typedef struct { int32_t __fsid_val[2]; } fsid_t; /* file system id type */ 386bd1d6d4Schristos 39b4cb63a6Smartin #if defined(_KERNEL) 406bd1d6d4Schristos /* 416bd1d6d4Schristos * File identifier. 426bd1d6d4Schristos * These are unique per filesystem on a single machine. 436bd1d6d4Schristos */ 446bd1d6d4Schristos struct fid { 456bd1d6d4Schristos unsigned short fid_len; /* length of data in bytes */ 468e2e7c23Spooka unsigned short fid_reserved; /* compat: historic align */ 47d9e2795eSgmcgarry char fid_data[0]; /* data (variable length) */ 486bd1d6d4Schristos }; 496bd1d6d4Schristos 506bd1d6d4Schristos /* 516bd1d6d4Schristos * Generic file handle 526bd1d6d4Schristos */ 536bd1d6d4Schristos struct fhandle { 546bd1d6d4Schristos fsid_t fh_fsid; /* File system id of mount point */ 556bd1d6d4Schristos struct fid fh_fid; /* File sys specific id */ 566bd1d6d4Schristos }; 576bd1d6d4Schristos typedef struct fhandle fhandle_t; 586bd1d6d4Schristos 59a1c2fd09Syamt /* 60a1c2fd09Syamt * FHANDLE_SIZE_MAX: arbitrary value to prevent unreasonable allocation. 61a1c2fd09Syamt * 62a1c2fd09Syamt * FHANDLE_SIZE_MIN: chosen for compatibility. smaller handles are zero-padded. 63a1c2fd09Syamt */ 64a1c2fd09Syamt 654977b4bbSyamt #define FHANDLE_SIZE_COMPAT 28 66a1c2fd09Syamt #define FHANDLE_SIZE_MAX 1024 674977b4bbSyamt #define FHANDLE_SIZE_MIN FHANDLE_SIZE_COMPAT 68a1c2fd09Syamt 69050993bdSyamt #define FHANDLE_FSID(fh) (&(fh)->fh_fsid) 70050993bdSyamt #define FHANDLE_FILEID(fh) (&(fh)->fh_fid) 71a1c2fd09Syamt #define FHANDLE_SIZE_FROM_FILEID_SIZE(fidsize) \ 72a1c2fd09Syamt MAX(FHANDLE_SIZE_MIN, (offsetof(fhandle_t, fh_fid) + (fidsize))) 733b9db50eSyamt #define FHANDLE_SIZE(fh) \ 74a1c2fd09Syamt FHANDLE_SIZE_FROM_FILEID_SIZE(FHANDLE_FILEID(fh)->fid_len) 75050993bdSyamt #endif /* defined(_KERNEL) */ 76050993bdSyamt 776bd1d6d4Schristos /* 786bd1d6d4Schristos * Mount flags. XXX BEWARE: these are not in numerical order! 796bd1d6d4Schristos * 806bd1d6d4Schristos * Unmount uses MNT_FORCE flag. 816bd1d6d4Schristos * 826bd1d6d4Schristos * Note that all mount flags are listed here. if you need to add one, take 836bd1d6d4Schristos * one of the __MNT_UNUSED flags. 846bd1d6d4Schristos */ 856bd1d6d4Schristos 866bd1d6d4Schristos 876bd1d6d4Schristos #define MNT_RDONLY 0x00000001 /* read only filesystem */ 886bd1d6d4Schristos #define MNT_SYNCHRONOUS 0x00000002 /* file system written synchronously */ 896bd1d6d4Schristos #define MNT_NOEXEC 0x00000004 /* can't exec from filesystem */ 906bd1d6d4Schristos #define MNT_NOSUID 0x00000008 /* don't honor setuid bits on fs */ 916bd1d6d4Schristos #define MNT_NODEV 0x00000010 /* don't interpret special files */ 926bd1d6d4Schristos #define MNT_UNION 0x00000020 /* union with underlying filesystem */ 936bd1d6d4Schristos #define MNT_ASYNC 0x00000040 /* file system written asynchronously */ 946bd1d6d4Schristos #define MNT_NOCOREDUMP 0x00008000 /* don't write core dumps to this FS */ 950825226bSchristos #define MNT_RELATIME 0x00020000 /* only update access time if mod/ch */ 966bd1d6d4Schristos #define MNT_IGNORE 0x00100000 /* don't show entry in df */ 97*0cea7c3aSchristos #define MNT_NFS4ACLS 0x00200000 /* uses NFS4 Access Control Lists */ 988feb2e9eSdrochner #define MNT_DISCARD 0x00800000 /* use DISCARD/TRIM if supported */ 99c5dd68c6Smanu #define MNT_EXTATTR 0x01000000 /* enable extended attributes */ 10036d65f11Ssimonb #define MNT_LOG 0x02000000 /* Use logging */ 1016bd1d6d4Schristos #define MNT_NOATIME 0x04000000 /* Never update access times in fs */ 10259a9e119Schristos #define MNT_AUTOMOUNTED 0x10000000 /* mounted by automountd(8) */ 1036bd1d6d4Schristos #define MNT_SYMPERM 0x20000000 /* recognize symlink permission */ 1046bd1d6d4Schristos #define MNT_NODEVMTIME 0x40000000 /* Never update mod times for devs */ 1056bd1d6d4Schristos #define MNT_SOFTDEP 0x80000000 /* Use soft dependencies */ 106b9c1fd7fSchristos #define MNT_POSIX1EACLS 0x00000800 /* shared with EXKERB */ 107*0cea7c3aSchristos #define MNT_ACLS MNT_POSIX1EACLS /* synonym */ 1086bd1d6d4Schristos 1096bd1d6d4Schristos #define __MNT_BASIC_FLAGS \ 1100825226bSchristos { MNT_ASYNC, 0, "asynchronous" }, \ 11159a9e119Schristos { MNT_AUTOMOUNTED, 0, "automounted" }, \ 112*0cea7c3aSchristos { MNT_NFS4ACLS, 0, "nfs4acls" }, \ 113b9c1fd7fSchristos { MNT_POSIX1EACLS, 0, "posix1eacls" }, \ 1148feb2e9eSdrochner { MNT_DISCARD, 0, "discard" }, \ 1150825226bSchristos { MNT_EXTATTR, 0, "extattr" }, \ 1160825226bSchristos { MNT_IGNORE, 0, "hidden" }, \ 1170825226bSchristos { MNT_LOG, 0, "log" }, \ 1180825226bSchristos { MNT_NOATIME, 0, "noatime" }, \ 1190825226bSchristos { MNT_NOCOREDUMP, 0, "nocoredump" }, \ 1200825226bSchristos { MNT_NODEV, 0, "nodev" }, \ 1210825226bSchristos { MNT_NODEVMTIME, 0, "nodevmtime" }, \ 1226bd1d6d4Schristos { MNT_NOEXEC, 0, "noexec" }, \ 1236bd1d6d4Schristos { MNT_NOSUID, 0, "nosuid" }, \ 1240825226bSchristos { MNT_RDONLY, 0, "read-only" }, \ 1250825226bSchristos { MNT_RELATIME, 0, "relatime" }, \ 12636d65f11Ssimonb { MNT_SOFTDEP, 0, "soft dependencies" }, \ 1270825226bSchristos { MNT_SYMPERM, 0, "symperm" }, \ 1280825226bSchristos { MNT_SYNCHRONOUS, 0, "synchronous" }, \ 1290825226bSchristos { MNT_UNION, 0, "union" }, \ 1306bd1d6d4Schristos 13159a9e119Schristos #define MNT_BASIC_FLAGS (MNT_ASYNC | MNT_AUTOMOUNTED | MNT_DISCARD | \ 13259a9e119Schristos MNT_EXTATTR | MNT_LOG | MNT_NOATIME | MNT_NOCOREDUMP | MNT_NODEV | \ 13359a9e119Schristos MNT_NODEVMTIME | MNT_NOEXEC | MNT_NOSUID | MNT_RDONLY | MNT_RELATIME | \ 134*0cea7c3aSchristos MNT_SOFTDEP | MNT_SYMPERM | MNT_SYNCHRONOUS | MNT_UNION | MNT_NFS4ACLS | \ 135b9c1fd7fSchristos MNT_POSIX1EACLS) 1366bd1d6d4Schristos /* 1376bd1d6d4Schristos * exported mount flags. 1386bd1d6d4Schristos */ 1396bd1d6d4Schristos #define MNT_EXRDONLY 0x00000080 /* exported read only */ 1406bd1d6d4Schristos #define MNT_EXPORTED 0x00000100 /* file system is exported */ 1416bd1d6d4Schristos #define MNT_DEFEXPORTED 0x00000200 /* exported to the world */ 1426bd1d6d4Schristos #define MNT_EXPORTANON 0x00000400 /* use anon uid mapping for everyone */ 1436bd1d6d4Schristos #define MNT_EXKERB 0x00000800 /* exported with Kerberos uid mapping */ 1446bd1d6d4Schristos #define MNT_EXNORESPORT 0x08000000 /* don't enforce reserved ports (NFS) */ 1456bd1d6d4Schristos #define MNT_EXPUBLIC 0x10000000 /* public export (WebNFS) */ 1466bd1d6d4Schristos 1476bd1d6d4Schristos #define __MNT_EXPORTED_FLAGS \ 1486bd1d6d4Schristos { MNT_EXRDONLY, 1, "exported read-only" }, \ 1496bd1d6d4Schristos { MNT_EXPORTED, 0, "NFS exported" }, \ 1506bd1d6d4Schristos { MNT_DEFEXPORTED, 1, "exported to the world" }, \ 1516bd1d6d4Schristos { MNT_EXPORTANON, 1, "anon uid mapping" }, \ 1524dd43ac9Schristos { MNT_EXKERB, 1, "kerberos uid mapping/posix1e ACLS" }, \ 1536bd1d6d4Schristos { MNT_EXNORESPORT, 0, "non-reserved ports" }, \ 1546bd1d6d4Schristos { MNT_EXPUBLIC, 0, "WebNFS exports" }, 1556bd1d6d4Schristos 1566bd1d6d4Schristos /* 1576bd1d6d4Schristos * Flags set by internal operations. 1586bd1d6d4Schristos */ 1596bd1d6d4Schristos #define MNT_LOCAL 0x00001000 /* filesystem is stored locally */ 1606bd1d6d4Schristos #define MNT_QUOTA 0x00002000 /* quotas are enabled on filesystem */ 1616bd1d6d4Schristos #define MNT_ROOTFS 0x00004000 /* identifies the root filesystem */ 1626bd1d6d4Schristos 1636bd1d6d4Schristos #define __MNT_INTERNAL_FLAGS \ 1646bd1d6d4Schristos { MNT_LOCAL, 0, "local" }, \ 1656bd1d6d4Schristos { MNT_QUOTA, 0, "with quotas" }, \ 1666bd1d6d4Schristos { MNT_ROOTFS, 1, "root file system" }, 1676bd1d6d4Schristos 1686bd1d6d4Schristos /* 1696bd1d6d4Schristos * Mask of flags that are visible to statvfs() 1706bd1d6d4Schristos */ 1712992e723Schristos #define MNT_VISFLAGMASK ( \ 1722992e723Schristos MNT_RDONLY | \ 1732992e723Schristos MNT_SYNCHRONOUS | \ 1742992e723Schristos MNT_NOEXEC | \ 1752992e723Schristos MNT_NOSUID | \ 1762992e723Schristos MNT_NODEV | \ 1772992e723Schristos MNT_UNION | \ 178*0cea7c3aSchristos MNT_NFS4ACLS | \ 1792992e723Schristos MNT_ASYNC | \ 1802992e723Schristos MNT_NOCOREDUMP | \ 1812992e723Schristos MNT_IGNORE | \ 1820b5eb080Sdrochner MNT_DISCARD | \ 1832992e723Schristos MNT_NOATIME | \ 1842992e723Schristos MNT_SYMPERM | \ 1852992e723Schristos MNT_NODEVMTIME | \ 1862992e723Schristos MNT_SOFTDEP | \ 1872992e723Schristos MNT_EXRDONLY | \ 1882992e723Schristos MNT_EXPORTED | \ 1892992e723Schristos MNT_DEFEXPORTED | \ 1902992e723Schristos MNT_EXPORTANON | \ 1912992e723Schristos MNT_EXKERB | \ 1922992e723Schristos MNT_EXNORESPORT | \ 1932992e723Schristos MNT_EXPUBLIC | \ 1942992e723Schristos MNT_LOCAL | \ 1952992e723Schristos MNT_QUOTA | \ 19636d65f11Ssimonb MNT_ROOTFS | \ 197c5dd68c6Smanu MNT_LOG | \ 198b9c1fd7fSchristos MNT_POSIX1EACLS | \ 19959a9e119Schristos MNT_EXTATTR | \ 20059a9e119Schristos MNT_AUTOMOUNTED) 2016bd1d6d4Schristos 2026bd1d6d4Schristos /* 2036bd1d6d4Schristos * External filesystem control flags. 2046bd1d6d4Schristos */ 2056bd1d6d4Schristos #define MNT_UPDATE 0x00010000 /* not a real mount, just an update */ 2066bd1d6d4Schristos #define MNT_RELOAD 0x00040000 /* reload filesystem data */ 2076bd1d6d4Schristos #define MNT_FORCE 0x00080000 /* force unmount or readonly change */ 2086bd1d6d4Schristos #define MNT_GETARGS 0x00400000 /* retrieve file system specific args */ 2096bd1d6d4Schristos 21042489b9aSyamt #define MNT_OP_FLAGS (MNT_UPDATE|MNT_RELOAD|MNT_FORCE|MNT_GETARGS) 21142489b9aSyamt 2126bd1d6d4Schristos #define __MNT_EXTERNAL_FLAGS \ 2136bd1d6d4Schristos { MNT_UPDATE, 1, "being updated" }, \ 2146bd1d6d4Schristos { MNT_RELOAD, 1, "reload filesystem data" }, \ 2156bd1d6d4Schristos { MNT_FORCE, 1, "force unmount or readonly change" }, \ 2166bd1d6d4Schristos { MNT_GETARGS, 1, "retrieve mount arguments" }, 2176bd1d6d4Schristos 2186bd1d6d4Schristos /* 2196bd1d6d4Schristos * Internal filesystem control flags. 2206bd1d6d4Schristos * These are set in struct mount mnt_iflag. 2216bd1d6d4Schristos * 2226bd1d6d4Schristos * IMNT_UNMOUNT locks the mount entry so that name lookup cannot proceed 2236bd1d6d4Schristos * past the mount point. This keeps the subtree stable during mounts 2246bd1d6d4Schristos * and unmounts. 2256bd1d6d4Schristos */ 2266bd1d6d4Schristos #define IMNT_GONE 0x00000001 /* filesystem is gone.. */ 2276bd1d6d4Schristos #define IMNT_UNMOUNT 0x00000002 /* unmount in progress */ 2286bd1d6d4Schristos #define IMNT_WANTRDWR 0x00000004 /* upgrade to read/write requested */ 229514d2707Shannken #define IMNT_WANTRDONLY 0x00000008 /* upgrade to readonly requested */ 23080d1f210Sad #define IMNT_NCLOOKUP 0x00000020 /* can do lookop direct in namecache */ 23145a21b76Smycroft #define IMNT_DTYPE 0x00000040 /* returns d_type fields */ 23280d1f210Sad #define IMNT_SHRLOOKUP 0x00000080 /* can do LK_SHARED lookups */ 2337dad9f73Sad #define IMNT_MPSAFE 0x00000100 /* file system code MP safe */ 2348df7804cSpooka #define IMNT_CAN_RWTORO 0x00000200 /* can downgrade fs to from rw to r/o */ 235c9493c34Shannken #define IMNT_ONWORKLIST 0x00000400 /* on syncer worklist */ 2366bd1d6d4Schristos 2376bd1d6d4Schristos #define __MNT_FLAGS \ 2386bd1d6d4Schristos __MNT_BASIC_FLAGS \ 2396bd1d6d4Schristos __MNT_EXPORTED_FLAGS \ 2406bd1d6d4Schristos __MNT_INTERNAL_FLAGS \ 2416bd1d6d4Schristos __MNT_EXTERNAL_FLAGS 2426bd1d6d4Schristos 2436bd1d6d4Schristos #define __MNT_FLAG_BITS \ 2446bd1d6d4Schristos "\20" \ 2456bd1d6d4Schristos "\40MNT_SOFTDEP" \ 2466bd1d6d4Schristos "\37MNT_NODEVMTIME" \ 2476bd1d6d4Schristos "\36MNT_SYMPERM" \ 2486bd1d6d4Schristos "\35MNT_EXPUBLIC" \ 2496bd1d6d4Schristos "\34MNT_EXNORESPORT" \ 2506bd1d6d4Schristos "\33MNT_NOATIME" \ 25136d65f11Ssimonb "\32MNT_LOG" \ 252c5dd68c6Smanu "\31MNT_EXTATTR" \ 2538feb2e9eSdrochner "\30MNT_DISCARD" \ 2546bd1d6d4Schristos "\27MNT_GETARGS" \ 255*0cea7c3aSchristos "\26MNT_NFS4ACLS" \ 2566bd1d6d4Schristos "\25MNT_IGNORE" \ 2576bd1d6d4Schristos "\24MNT_FORCE" \ 2586bd1d6d4Schristos "\23MNT_RELOAD" \ 2590825226bSchristos "\22MNT_RELATIME" \ 2606bd1d6d4Schristos "\21MNT_UPDATE" \ 2616bd1d6d4Schristos "\20MNT_NOCOREDUMP" \ 2626bd1d6d4Schristos "\17MNT_ROOTFS" \ 2636bd1d6d4Schristos "\16MNT_QUOTA" \ 2646bd1d6d4Schristos "\15MNT_LOCAL" \ 265b9c1fd7fSchristos "\14MNT_EXKERB|MNT_POSIX1EACLS" \ 2666bd1d6d4Schristos "\13MNT_EXPORTANON" \ 2676bd1d6d4Schristos "\12MNT_DEFEXPORTED" \ 2686bd1d6d4Schristos "\11MNT_EXPORTED" \ 2696bd1d6d4Schristos "\10MNT_EXRDONLY" \ 2706bd1d6d4Schristos "\07MNT_ASYNC" \ 2716bd1d6d4Schristos "\06MNT_UNION" \ 2726bd1d6d4Schristos "\05MNT_NODEV" \ 2736bd1d6d4Schristos "\04MNT_NOSUID" \ 2746bd1d6d4Schristos "\03MNT_NOEXEC" \ 2756bd1d6d4Schristos "\02MNT_SYNCHRONOUS" \ 2766bd1d6d4Schristos "\01MNT_RDONLY" 2776bd1d6d4Schristos 2786bd1d6d4Schristos #define __IMNT_FLAG_BITS \ 2796bd1d6d4Schristos "\20" \ 280c9493c34Shannken "\13IMNT_ONWORKLIST" \ 2818df7804cSpooka "\12IMNT_CAN_RWTORO" \ 282c5fb8639Spooka "\11IMNT_MPSAFE" \ 28380d1f210Sad "\10IMNT_SHRLOOKUP" \ 28445a21b76Smycroft "\07IMNT_DTYPE" \ 28580d1f210Sad "\06IMNT_NCLOOKUP" \ 286514d2707Shannken "\04IMNT_WANTRDONLY" \ 2876bd1d6d4Schristos "\03IMNT_WANTRDWR" \ 2886bd1d6d4Schristos "\02IMNT_UNMOUNT" \ 2896bd1d6d4Schristos "\01IMNT_GONE" 2906bd1d6d4Schristos 2916bd1d6d4Schristos /* 2926bd1d6d4Schristos * Flags for various system call interfaces. 2936bd1d6d4Schristos * 2946bd1d6d4Schristos * waitfor flags to vfs_sync() and getvfsstat() 2956bd1d6d4Schristos */ 2966bd1d6d4Schristos #define MNT_WAIT 1 /* synchronously wait for I/O to complete */ 2976bd1d6d4Schristos #define MNT_NOWAIT 2 /* start all I/O, but do not wait for it */ 2986bd1d6d4Schristos #define MNT_LAZY 3 /* push data not written by filesystem syncer */ 2996bd1d6d4Schristos #endif /* _SYS_FSTYPES_H_ */ 300