Home | History | Annotate | Line # | Download | only in sys
      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