#ifndef _SYS_FSTYPES_H_
#define _SYS_FSTYPES_H_
typedef struct { int32_t __fsid_val[2]; } fsid_t;
#if defined(_KERNEL)
struct fid {
unsigned short fid_len;
unsigned short fid_reserved;
char fid_data[0];
};
struct fhandle {
fsid_t fh_fsid;
struct fid fh_fid;
};
typedef struct fhandle fhandle_t;
#define FHANDLE_SIZE_COMPAT 28
#define FHANDLE_SIZE_MAX 1024
#define FHANDLE_SIZE_MIN FHANDLE_SIZE_COMPAT
#define FHANDLE_FSID(fh) (&(fh)->fh_fsid)
#define FHANDLE_FILEID(fh) (&(fh)->fh_fid)
#define FHANDLE_SIZE_FROM_FILEID_SIZE(fidsize) \
MAX(FHANDLE_SIZE_MIN, (offsetof(fhandle_t, fh_fid) + (fidsize)))
#define FHANDLE_SIZE(fh) \
FHANDLE_SIZE_FROM_FILEID_SIZE(FHANDLE_FILEID(fh)->fid_len)
#endif
#define MNT_RDONLY 0x00000001
#define MNT_SYNCHRONOUS 0x00000002
#define MNT_NOEXEC 0x00000004
#define MNT_NOSUID 0x00000008
#define MNT_NODEV 0x00000010
#define MNT_UNION 0x00000020
#define MNT_ASYNC 0x00000040
#define MNT_NOCOREDUMP 0x00008000
#define MNT_RELATIME 0x00020000
#define MNT_IGNORE 0x00100000
#define MNT_NFS4ACLS 0x00200000
#define MNT_DISCARD 0x00800000
#define MNT_EXTATTR 0x01000000
#define MNT_LOG 0x02000000
#define MNT_NOATIME 0x04000000
#define MNT_AUTOMOUNTED 0x10000000
#define MNT_SYMPERM 0x20000000
#define MNT_NODEVMTIME 0x40000000
#define MNT_SOFTDEP 0x80000000
#define MNT_POSIX1EACLS 0x00000800
#define MNT_ACLS MNT_POSIX1EACLS
#define __MNT_BASIC_FLAGS \
{ MNT_ASYNC, 0, "asynchronous" }, \
{ MNT_AUTOMOUNTED, 0, "automounted" }, \
{ MNT_NFS4ACLS, 0, "nfs4acls" }, \
{ MNT_POSIX1EACLS, 0, "posix1eacls" }, \
{ MNT_DISCARD, 0, "discard" }, \
{ MNT_EXTATTR, 0, "extattr" }, \
{ MNT_IGNORE, 0, "hidden" }, \
{ MNT_LOG, 0, "log" }, \
{ MNT_NOATIME, 0, "noatime" }, \
{ MNT_NOCOREDUMP, 0, "nocoredump" }, \
{ MNT_NODEV, 0, "nodev" }, \
{ MNT_NODEVMTIME, 0, "nodevmtime" }, \
{ MNT_NOEXEC, 0, "noexec" }, \
{ MNT_NOSUID, 0, "nosuid" }, \
{ MNT_RDONLY, 0, "read-only" }, \
{ MNT_RELATIME, 0, "relatime" }, \
{ MNT_SOFTDEP, 0, "soft dependencies" }, \
{ MNT_SYMPERM, 0, "symperm" }, \
{ MNT_SYNCHRONOUS, 0, "synchronous" }, \
{ MNT_UNION, 0, "union" }, \
#define MNT_BASIC_FLAGS (MNT_ASYNC | MNT_AUTOMOUNTED | MNT_DISCARD | \
MNT_EXTATTR | MNT_LOG | MNT_NOATIME | MNT_NOCOREDUMP | MNT_NODEV | \
MNT_NODEVMTIME | MNT_NOEXEC | MNT_NOSUID | MNT_RDONLY | MNT_RELATIME | \
MNT_SOFTDEP | MNT_SYMPERM | MNT_SYNCHRONOUS | MNT_UNION | MNT_NFS4ACLS | \
MNT_POSIX1EACLS)
#define MNT_EXRDONLY 0x00000080
#define MNT_EXPORTED 0x00000100
#define MNT_DEFEXPORTED 0x00000200
#define MNT_EXPORTANON 0x00000400
#define MNT_EXKERB 0x00000800
#define MNT_EXNORESPORT 0x08000000
#define MNT_EXPUBLIC 0x10000000
#define __MNT_EXPORTED_FLAGS \
{ MNT_EXRDONLY, 1, "exported read-only" }, \
{ MNT_EXPORTED, 0, "NFS exported" }, \
{ MNT_DEFEXPORTED, 1, "exported to the world" }, \
{ MNT_EXPORTANON, 1, "anon uid mapping" }, \
{ MNT_EXKERB, 1, "kerberos uid mapping/posix1e ACLS" }, \
{ MNT_EXNORESPORT, 0, "non-reserved ports" }, \
{ MNT_EXPUBLIC, 0, "WebNFS exports" },
#define MNT_LOCAL 0x00001000
#define MNT_QUOTA 0x00002000
#define MNT_ROOTFS 0x00004000
#define __MNT_INTERNAL_FLAGS \
{ MNT_LOCAL, 0, "local" }, \
{ MNT_QUOTA, 0, "with quotas" }, \
{ MNT_ROOTFS, 1, "root file system" },
#define MNT_VISFLAGMASK ( \
MNT_RDONLY | \
MNT_SYNCHRONOUS | \
MNT_NOEXEC | \
MNT_NOSUID | \
MNT_NODEV | \
MNT_UNION | \
MNT_NFS4ACLS | \
MNT_ASYNC | \
MNT_NOCOREDUMP | \
MNT_IGNORE | \
MNT_DISCARD | \
MNT_NOATIME | \
MNT_SYMPERM | \
MNT_NODEVMTIME | \
MNT_SOFTDEP | \
MNT_EXRDONLY | \
MNT_EXPORTED | \
MNT_DEFEXPORTED | \
MNT_EXPORTANON | \
MNT_EXKERB | \
MNT_EXNORESPORT | \
MNT_EXPUBLIC | \
MNT_LOCAL | \
MNT_QUOTA | \
MNT_ROOTFS | \
MNT_LOG | \
MNT_POSIX1EACLS | \
MNT_EXTATTR | \
MNT_AUTOMOUNTED)
#define MNT_UPDATE 0x00010000
#define MNT_RELOAD 0x00040000
#define MNT_FORCE 0x00080000
#define MNT_GETARGS 0x00400000
#define MNT_OP_FLAGS (MNT_UPDATE|MNT_RELOAD|MNT_FORCE|MNT_GETARGS)
#define __MNT_EXTERNAL_FLAGS \
{ MNT_UPDATE, 1, "being updated" }, \
{ MNT_RELOAD, 1, "reload filesystem data" }, \
{ MNT_FORCE, 1, "force unmount or readonly change" }, \
{ MNT_GETARGS, 1, "retrieve mount arguments" },
#define IMNT_GONE 0x00000001
#define IMNT_UNMOUNT 0x00000002
#define IMNT_WANTRDWR 0x00000004
#define IMNT_WANTRDONLY 0x00000008
#define IMNT_NCLOOKUP 0x00000020
#define IMNT_DTYPE 0x00000040
#define IMNT_SHRLOOKUP 0x00000080
#define IMNT_MPSAFE 0x00000100
#define IMNT_CAN_RWTORO 0x00000200
#define IMNT_ONWORKLIST 0x00000400
#define __MNT_FLAGS \
__MNT_BASIC_FLAGS \
__MNT_EXPORTED_FLAGS \
__MNT_INTERNAL_FLAGS \
__MNT_EXTERNAL_FLAGS
#define __MNT_FLAG_BITS \
"\20" \
"\40MNT_SOFTDEP" \
"\37MNT_NODEVMTIME" \
"\36MNT_SYMPERM" \
"\35MNT_EXPUBLIC" \
"\34MNT_EXNORESPORT" \
"\33MNT_NOATIME" \
"\32MNT_LOG" \
"\31MNT_EXTATTR" \
"\30MNT_DISCARD" \
"\27MNT_GETARGS" \
"\26MNT_NFS4ACLS" \
"\25MNT_IGNORE" \
"\24MNT_FORCE" \
"\23MNT_RELOAD" \
"\22MNT_RELATIME" \
"\21MNT_UPDATE" \
"\20MNT_NOCOREDUMP" \
"\17MNT_ROOTFS" \
"\16MNT_QUOTA" \
"\15MNT_LOCAL" \
"\14MNT_EXKERB|MNT_POSIX1EACLS" \
"\13MNT_EXPORTANON" \
"\12MNT_DEFEXPORTED" \
"\11MNT_EXPORTED" \
"\10MNT_EXRDONLY" \
"\07MNT_ASYNC" \
"\06MNT_UNION" \
"\05MNT_NODEV" \
"\04MNT_NOSUID" \
"\03MNT_NOEXEC" \
"\02MNT_SYNCHRONOUS" \
"\01MNT_RDONLY"
#define __IMNT_FLAG_BITS \
"\20" \
"\13IMNT_ONWORKLIST" \
"\12IMNT_CAN_RWTORO" \
"\11IMNT_MPSAFE" \
"\10IMNT_SHRLOOKUP" \
"\07IMNT_DTYPE" \
"\06IMNT_NCLOOKUP" \
"\04IMNT_WANTRDONLY" \
"\03IMNT_WANTRDWR" \
"\02IMNT_UNMOUNT" \
"\01IMNT_GONE"
#define MNT_WAIT 1
#define MNT_NOWAIT 2
#define MNT_LAZY 3
#endif