xref: /netbsd/sys/sys/fstypes.h (revision 0cea7c3a)
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