- uint32_t nfsa_flags; /* file system flags */
- uint32_t nfsa_lease; /* lease time in seconds */
- uint32_t nfsa_maxname; /* maximum filename size */
- uint32_t nfsa_maxlink; /* maximum # links */
- uint32_t nfsa_bsize; /* block size */
- uint32_t nfsa_pad; /* UNUSED */
- uint64_t nfsa_maxfilesize; /* maximum file size */
- uint64_t nfsa_maxread; /* maximum read size */
- uint64_t nfsa_maxwrite; /* maximum write size */
- uint64_t nfsa_files_avail; /* file slots available */
- uint64_t nfsa_files_free; /* file slots free */
- uint64_t nfsa_files_total; /* file slots total */
- uint64_t nfsa_space_avail; /* disk space available */
- uint64_t nfsa_space_free; /* disk space free */
- uint64_t nfsa_space_total; /* disk space total */
- uint32_t nfsa_supp_attr[NFS_ATTR_BITMAP_LEN]; /* attributes supported on this file system */
- uint32_t nfsa_bitmap[NFS_ATTR_BITMAP_LEN]; /* valid attributes */
+ uint32_t nfsa_flags; /* file system flags */
+ uint32_t nfsa_lease; /* lease time in seconds */
+ uint32_t nfsa_maxname; /* maximum filename size */
+ uint32_t nfsa_maxlink; /* maximum # links */
+ uint32_t nfsa_bsize; /* block size */
+ uint32_t nfsa_pad; /* UNUSED */
+ uint64_t nfsa_maxfilesize; /* maximum file size */
+ uint64_t nfsa_maxread; /* maximum read size */
+ uint64_t nfsa_maxwrite; /* maximum write size */
+ uint64_t nfsa_files_avail; /* file slots available */
+ uint64_t nfsa_files_free; /* file slots free */
+ uint64_t nfsa_files_total; /* file slots total */
+ uint64_t nfsa_space_avail; /* disk space available */
+ uint64_t nfsa_space_free; /* disk space free */
+ uint64_t nfsa_space_total; /* disk space total */
+ uint32_t nfsa_supp_attr[NFS_ATTR_BITMAP_LEN]; /* attributes supported on this file system */
+ uint32_t nfsa_bitmap[NFS_ATTR_BITMAP_LEN]; /* valid attributes */
-#define NFS_FSFLAG_LINK 0x00000001
-#define NFS_FSFLAG_SYMLINK 0x00000002
-#define NFS_FSFLAG_UNIQUE_FH 0x00000004
-#define NFS_FSFLAG_ACL 0x00000008
-#define NFS_FSFLAG_SET_TIME 0x00000010
-#define NFS_FSFLAG_CASE_INSENSITIVE 0x00000020
-#define NFS_FSFLAG_CASE_PRESERVING 0x00000040
-#define NFS_FSFLAG_CHOWN_RESTRICTED 0x00000080
-#define NFS_FSFLAG_HOMOGENEOUS 0x00000100
-#define NFS_FSFLAG_NO_TRUNC 0x00000200
-#define NFS_FSFLAG_NAMED_ATTR 0x00000400
-#define NFS_FSFLAG_FHTYPE_MASK 0xFF000000
-#define NFS_FSFLAG_FHTYPE_SHIFT 24
+#define NFS_FSFLAG_LINK 0x00000001
+#define NFS_FSFLAG_SYMLINK 0x00000002
+#define NFS_FSFLAG_UNIQUE_FH 0x00000004
+#define NFS_FSFLAG_ACL 0x00000008
+#define NFS_FSFLAG_SET_TIME 0x00000010
+#define NFS_FSFLAG_CASE_INSENSITIVE 0x00000020
+#define NFS_FSFLAG_CASE_PRESERVING 0x00000040
+#define NFS_FSFLAG_CHOWN_RESTRICTED 0x00000080
+#define NFS_FSFLAG_HOMOGENEOUS 0x00000100
+#define NFS_FSFLAG_NO_TRUNC 0x00000200
+#define NFS_FSFLAG_NAMED_ATTR 0x00000400
+#define NFS_FSFLAG_FHTYPE_MASK 0xFF000000
+#define NFS_FSFLAG_FHTYPE_SHIFT 24
- lck_mtx_t nso_lock; /* nfs socket lock */
- TAILQ_ENTRY(nfs_socket) nso_link; /* list of sockets */
- struct sockaddr * nso_saddr; /* socket address */
- struct sockaddr * nso_saddr2; /* additional socket address */
- void * nso_wake; /* address to wake up */
- time_t nso_timestamp;
- time_t nso_reqtimestamp; /* last request sent */
- socket_t nso_so; /* socket */
- uint8_t nso_sotype; /* Type of socket */
- uint16_t nso_flags; /* NSO_* flags */
- struct nfs_location_index nso_location; /* location index */
- uint32_t nso_protocol; /* RPC protocol */
- uint32_t nso_version; /* RPC protocol version */
- uint32_t nso_pingxid; /* RPC XID of NULL ping request */
- uint32_t nso_nfs_min_vers; /* minimum nfs version for connecting sockets */
- uint32_t nso_nfs_max_vers; /* maximum nfs version for connecting sockets */
- int nso_error; /* saved error/status */
- struct nfs_rpc_record_state nso_rrs; /* RPC record parsing state (TCP) */
+ lck_mtx_t nso_lock; /* nfs socket lock */
+ TAILQ_ENTRY(nfs_socket) nso_link; /* list of sockets */
+ struct sockaddr * nso_saddr; /* socket address */
+ struct sockaddr * nso_saddr2; /* additional socket address */
+ void * nso_wake; /* address to wake up */
+ time_t nso_timestamp;
+ time_t nso_reqtimestamp; /* last request sent */
+ socket_t nso_so; /* socket */
+ uint8_t nso_sotype; /* Type of socket */
+ uint16_t nso_flags; /* NSO_* flags */
+ struct nfs_location_index nso_location; /* location index */
+ uint32_t nso_protocol; /* RPC protocol */
+ uint32_t nso_version; /* RPC protocol version */
+ uint32_t nso_pingxid; /* RPC XID of NULL ping request */
+ uint32_t nso_nfs_min_vers; /* minimum nfs version for connecting sockets */
+ uint32_t nso_nfs_max_vers; /* maximum nfs version for connecting sockets */
+ int nso_error; /* saved error/status */
+ struct nfs_rpc_record_state nso_rrs; /* RPC record parsing state (TCP) */
- struct nfs_location_index nss_startloc; /* starting location index */
- struct nfs_location_index nss_nextloc; /* next location index */
- struct nfssocketlist nss_socklist; /* list of active sockets */
- time_t nss_timestamp; /* search start time */
- time_t nss_last; /* timestamp of last socket */
- struct nfs_socket * nss_sock; /* found socket */
- uint8_t nss_sotype; /* TCP/UDP */
- uint8_t nss_sockcnt; /* # of active sockets */
- in_port_t nss_port; /* port # to connect to */
- uint32_t nss_protocol; /* RPC protocol */
- uint32_t nss_version; /* RPC protocol version */
- uint32_t nss_flags; /* (see below) */
- int nss_addrcnt; /* Number addresses to try or left */
- int nss_timeo; /* how long we are willing to wait */
- int nss_error; /* best error we've gotten so far */
+ struct nfs_location_index nss_startloc; /* starting location index */
+ struct nfs_location_index nss_nextloc; /* next location index */
+ struct nfssocketlist nss_socklist; /* list of active sockets */
+ time_t nss_timestamp; /* search start time */
+ time_t nss_last; /* timestamp of last socket */
+ struct nfs_socket * nss_sock; /* found socket */
+ uint8_t nss_sotype; /* TCP/UDP */
+ uint8_t nss_sockcnt; /* # of active sockets */
+ in_port_t nss_port; /* port # to connect to */
+ uint32_t nss_protocol; /* RPC protocol */
+ uint32_t nss_version; /* RPC protocol version */
+ uint32_t nss_flags; /* (see below) */
+ int nss_addrcnt; /* Number addresses to try or left */
+ int nss_timeo; /* how long we are willing to wait */
+ int nss_error; /* best error we've gotten so far */
- int (*nf_mount)(struct nfsmount *, vfs_context_t, nfsnode_t *);
- int (*nf_update_statfs)(struct nfsmount *, vfs_context_t);
- int (*nf_getquota)(struct nfsmount *, vfs_context_t, uid_t, int, struct dqblk *);
- int (*nf_access_rpc)(nfsnode_t, u_int32_t *, int, vfs_context_t);
- int (*nf_getattr_rpc)(nfsnode_t, mount_t, u_char *, size_t, int, vfs_context_t, struct nfs_vattr *, u_int64_t *);
- int (*nf_setattr_rpc)(nfsnode_t, struct vnode_attr *, vfs_context_t);
- int (*nf_read_rpc_async)(nfsnode_t, off_t, size_t, thread_t, kauth_cred_t, struct nfsreq_cbinfo *, struct nfsreq **);
- int (*nf_read_rpc_async_finish)(nfsnode_t, struct nfsreq *, uio_t, size_t *, int *);
- int (*nf_readlink_rpc)(nfsnode_t, char *, uint32_t *, vfs_context_t);
- int (*nf_write_rpc_async)(nfsnode_t, uio_t, size_t, thread_t, kauth_cred_t, int, struct nfsreq_cbinfo *, struct nfsreq **);
- int (*nf_write_rpc_async_finish)(nfsnode_t, struct nfsreq *, int *, size_t *, uint64_t *);
- int (*nf_commit_rpc)(nfsnode_t, uint64_t, uint64_t, kauth_cred_t, uint64_t);
- int (*nf_lookup_rpc_async)(nfsnode_t, char *, int, vfs_context_t, struct nfsreq **);
- int (*nf_lookup_rpc_async_finish)(nfsnode_t, char *, int, vfs_context_t, struct nfsreq *, u_int64_t *, fhandle_t *, struct nfs_vattr *);
- int (*nf_remove_rpc)(nfsnode_t, char *, int, thread_t, kauth_cred_t);
- int (*nf_rename_rpc)(nfsnode_t, char *, int, nfsnode_t, char *, int, vfs_context_t);
- int (*nf_setlock_rpc)(nfsnode_t, struct nfs_open_file *, struct nfs_file_lock *, int, int, thread_t, kauth_cred_t);
- int (*nf_unlock_rpc)(nfsnode_t, struct nfs_lock_owner *, int, uint64_t, uint64_t, int, thread_t, kauth_cred_t);
- int (*nf_getlock_rpc)(nfsnode_t, struct nfs_lock_owner *, struct flock *, uint64_t, uint64_t, vfs_context_t);
+ int (*nf_mount)(struct nfsmount *, vfs_context_t, nfsnode_t *);
+ int (*nf_update_statfs)(struct nfsmount *, vfs_context_t);
+ int (*nf_getquota)(struct nfsmount *, vfs_context_t, uid_t, int, struct dqblk *);
+ int (*nf_access_rpc)(nfsnode_t, u_int32_t *, int, vfs_context_t);
+ int (*nf_getattr_rpc)(nfsnode_t, mount_t, u_char *, size_t, int, vfs_context_t, struct nfs_vattr *, u_int64_t *);
+ int (*nf_setattr_rpc)(nfsnode_t, struct vnode_attr *, vfs_context_t);
+ int (*nf_read_rpc_async)(nfsnode_t, off_t, size_t, thread_t, kauth_cred_t, struct nfsreq_cbinfo *, struct nfsreq **);
+ int (*nf_read_rpc_async_finish)(nfsnode_t, struct nfsreq *, uio_t, size_t *, int *);
+ int (*nf_readlink_rpc)(nfsnode_t, char *, uint32_t *, vfs_context_t);
+ int (*nf_write_rpc_async)(nfsnode_t, uio_t, size_t, thread_t, kauth_cred_t, int, struct nfsreq_cbinfo *, struct nfsreq **);
+ int (*nf_write_rpc_async_finish)(nfsnode_t, struct nfsreq *, int *, size_t *, uint64_t *);
+ int (*nf_commit_rpc)(nfsnode_t, uint64_t, uint64_t, kauth_cred_t, uint64_t);
+ int (*nf_lookup_rpc_async)(nfsnode_t, char *, int, vfs_context_t, struct nfsreq **);
+ int (*nf_lookup_rpc_async_finish)(nfsnode_t, char *, int, vfs_context_t, struct nfsreq *, u_int64_t *, fhandle_t *, struct nfs_vattr *);
+ int (*nf_remove_rpc)(nfsnode_t, char *, int, thread_t, kauth_cred_t);
+ int (*nf_rename_rpc)(nfsnode_t, char *, int, nfsnode_t, char *, int, vfs_context_t);
+ int (*nf_setlock_rpc)(nfsnode_t, struct nfs_open_file *, struct nfs_file_lock *, int, int, thread_t, kauth_cred_t);
+ int (*nf_unlock_rpc)(nfsnode_t, struct nfs_lock_owner *, int, uint64_t, uint64_t, int, thread_t, kauth_cred_t);
+ int (*nf_getlock_rpc)(nfsnode_t, struct nfs_lock_owner *, struct flock *, uint64_t, uint64_t, vfs_context_t);
- char * nm_realm; /* Kerberos realm to use */
- char * nm_principal; /* GSS principal to use on initial mount */
- char * nm_sprinc; /* Kerberos principal of the server */
- int nm_ref; /* Reference count on this mount */
- int nm_state; /* Internal state flags */
- int nm_vers; /* NFS version */
- uint32_t nm_minor_vers; /* minor version of above */
- uint32_t nm_min_vers; /* minimum packed version to try */
- uint32_t nm_max_vers; /* maximum packed version to try */
- struct nfs_funcs *nm_funcs; /* version-specific functions */
- kauth_cred_t nm_mcred; /* credential used for the mount */
- mount_t nm_mountp; /* VFS structure for this filesystem */
- nfsnode_t nm_dnp; /* root directory nfsnode pointer */
+ char * nm_realm; /* Kerberos realm to use */
+ char * nm_principal; /* GSS principal to use on initial mount */
+ char * nm_sprinc; /* Kerberos principal of the server */
+ int nm_ref; /* Reference count on this mount */
+ int nm_state; /* Internal state flags */
+ int nm_vers; /* NFS version */
+ uint32_t nm_minor_vers; /* minor version of above */
+ uint32_t nm_min_vers; /* minimum packed version to try */
+ uint32_t nm_max_vers; /* maximum packed version to try */
+ const struct nfs_funcs *nm_funcs;/* version-specific functions */
+ kauth_cred_t nm_mcred; /* credential used for the mount */
+ mount_t nm_mountp; /* VFS structure for this filesystem */
+ nfsnode_t nm_dnp; /* root directory nfsnode pointer */
- uint32_t nm_numgrps; /* Max. size of groupslist */
- TAILQ_HEAD(, nfs_gss_clnt_ctx) nm_gsscl; /* GSS user contexts */
- uint32_t nm_ncentries; /* GSS expired negative cache entries */
- int nm_timeo; /* Init timer for NFSMNT_DUMBTIMR */
- int nm_retry; /* Max retries */
- uint32_t nm_rsize; /* Max size of read rpc */
- uint32_t nm_wsize; /* Max size of write rpc */
- uint32_t nm_biosize; /* buffer I/O size */
- uint32_t nm_readdirsize; /* Size of a readdir rpc */
- uint32_t nm_readahead; /* Num. of blocks to readahead */
- uint32_t nm_acregmin; /* reg file min attr cache timeout */
- uint32_t nm_acregmax; /* reg file max attr cache timeout */
- uint32_t nm_acdirmin; /* dir min attr cache timeout */
- uint32_t nm_acdirmax; /* dir max attr cache timeout */
- uint32_t nm_auth; /* security mechanism flavor being used */
- uint32_t nm_writers; /* Number of nodes open for writing */
- uint32_t nm_mappers; /* Number of nodes that have mmapped */
- struct nfs_sec nm_sec; /* acceptable security mechanism flavors */
- struct nfs_sec nm_servsec; /* server's acceptable security mechanism flavors */
- struct nfs_etype nm_etype; /* If using kerberos, the support session key encryption types */
- fhandle_t *nm_fh; /* initial file handle */
- uint8_t nm_lockmode; /* advisory file locking mode */
+ uint32_t nm_numgrps; /* Max. size of groupslist */
+ TAILQ_HEAD(, nfs_gss_clnt_ctx) nm_gsscl; /* GSS user contexts */
+ uint32_t nm_ncentries; /* GSS expired negative cache entries */
+ int nm_timeo; /* Init timer for NFSMNT_DUMBTIMR */
+ int nm_retry; /* Max retries */
+ uint32_t nm_rsize; /* Max size of read rpc */
+ uint32_t nm_wsize; /* Max size of write rpc */
+ uint32_t nm_biosize; /* buffer I/O size */
+ uint32_t nm_readdirsize; /* Size of a readdir rpc */
+ uint32_t nm_readahead; /* Num. of blocks to readahead */
+ uint32_t nm_acregmin; /* reg file min attr cache timeout */
+ uint32_t nm_acregmax; /* reg file max attr cache timeout */
+ uint32_t nm_acdirmin; /* dir min attr cache timeout */
+ uint32_t nm_acdirmax; /* dir max attr cache timeout */
+ uint32_t nm_auth; /* security mechanism flavor being used */
+ uint32_t nm_writers; /* Number of nodes open for writing */
+ uint32_t nm_mappers; /* Number of nodes that have mmapped */
+ struct nfs_sec nm_sec; /* acceptable security mechanism flavors */
+ struct nfs_sec nm_servsec; /* server's acceptable security mechanism flavors */
+ struct nfs_etype nm_etype; /* If using kerberos, the support session key encryption types */
+ fhandle_t *nm_fh; /* initial file handle */
+ uint8_t nm_lockmode; /* advisory file locking mode */
- struct { /* v2/v3 specific fields */
- TAILQ_ENTRY(nfsmount) ldlink; /* chain of mounts registered for lockd use */
- int udp_sent; /* UDP request send count */
- int udp_cwnd; /* UDP request congestion window */
- struct nfs_reqqhead udp_cwndq; /* requests waiting on cwnd */
- struct sockaddr *rqsaddr;/* cached rquota socket address */
- uint32_t rqsaddrstamp; /* timestamp of rquota socket address */
- } v3;
- struct { /* v4 specific fields */
- struct nfs_client_id *longid; /* client ID, long form */
- uint64_t mounttime; /* used as client ID verifier */
- uint64_t clientid; /* client ID, short form */
- thread_call_t renew_timer; /* RENEW timer call */
- nfs_fsid fsid; /* NFS file system id */
- TAILQ_HEAD(, nfsnode) delegations; /* list of nodes with delegations */
- TAILQ_HEAD(, nfsnode) dreturnq; /* list of nodes with delegations to return */
- TAILQ_ENTRY(nfsmount) cblink; /* chain of mounts registered for callbacks */
- uint32_t cbid; /* callback channel identifier */
- uint32_t cbrefs; /* # callbacks using this mount */
- } v4;
+ struct { /* v2/v3 specific fields */
+ TAILQ_ENTRY(nfsmount) ldlink; /* chain of mounts registered for lockd use */
+ int udp_sent; /* UDP request send count */
+ int udp_cwnd; /* UDP request congestion window */
+ struct nfs_reqqhead udp_cwndq; /* requests waiting on cwnd */
+ struct sockaddr *rqsaddr;/* cached rquota socket address */
+ uint32_t rqsaddrstamp; /* timestamp of rquota socket address */
+ } v3;
+ struct { /* v4 specific fields */
+ struct nfs_client_id *longid; /* client ID, long form */
+ uint64_t mounttime; /* used as client ID verifier */
+ uint64_t clientid; /* client ID, short form */
+ thread_call_t renew_timer; /* RENEW timer call */
+ nfs_fsid fsid; /* NFS file system id */
+ TAILQ_HEAD(, nfsnode) delegations; /* list of nodes with delegations */
+ TAILQ_HEAD(, nfsnode) dreturnq; /* list of nodes with delegations to return */
+ TAILQ_ENTRY(nfsmount) cblink; /* chain of mounts registered for callbacks */
+ uint32_t cbid; /* callback channel identifier */
+ uint32_t cbrefs; /* # callbacks using this mount */
+ } v4;
- struct nfs_socket *nm_nso; /* current socket */
- struct sockaddr *nm_saddr; /* Address of server */
- u_short nm_sockflags; /* socket state flags */
- time_t nm_deadto_start; /* dead timeout start time */
- time_t nm_reconnect_start; /* reconnect start time */
- int nm_tprintf_initial_delay; /* delay first "server down" */
- int nm_tprintf_delay; /* delay between "server down" */
- int nm_deadtimeout; /* delay between first "server down" and dead set at mount time */
- int nm_curdeadtimeout; /* current dead timeout. Adjusted by mount state and mobility */
- int nm_srtt[4]; /* Timers for RPCs */
- int nm_sdrtt[4];
- int nm_timeouts; /* Request timeouts */
- int nm_jbreqs; /* # R_JBTPRINTFMSG requests */
- int nm_mounterror; /* status of mount connect */
- TAILQ_ENTRY(nfsmount) nm_pokeq; /* mount poke queue chain */
- thread_t nm_sockthd; /* socket thread for this mount */
+ struct nfs_socket *nm_nso; /* current socket */
+ struct sockaddr *nm_saddr; /* Address of server */
+ u_short nm_sockflags; /* socket state flags */
+ time_t nm_deadto_start; /* dead timeout start time */
+ time_t nm_reconnect_start; /* reconnect start time */
+ int nm_tprintf_initial_delay; /* delay first "server down" */
+ int nm_tprintf_delay; /* delay between "server down" */
+ int nm_deadtimeout; /* delay between first "server down" and dead set at mount time */
+ int nm_curdeadtimeout; /* current dead timeout. Adjusted by mount state and mobility */
+ int nm_srtt[4]; /* Timers for RPCs */
+ int nm_sdrtt[4];
+ int nm_timeouts; /* Request timeouts */
+ int nm_jbreqs; /* # R_JBTPRINTFMSG requests */
+ int nm_mounterror; /* status of mount connect */
+ TAILQ_ENTRY(nfsmount) nm_pokeq; /* mount poke queue chain */
+ thread_t nm_sockthd; /* socket thread for this mount */
-#define NFSSTA_MOUNT_THREAD 0x00000040 /* nfs_mount_connect_thread running */
-#define NFSSTA_MONITOR_SCAN 0x00000080 /* scan of monitored nodes in progress */
-#define NFSSTA_UNMOUNTING 0x00000100 /* an unmount attempt is in progress */
-#define NFSSTA_NEEDSECINFO 0x00000200 /* need to fetch security info */
-#define NFSSTA_CLIENTID 0x00000400 /* short client ID is valid */
-#define NFSSTA_BIGCOOKIES 0x00000800 /* have seen >32bit dir cookies */
-#define NFSSTA_JUKEBOXTIMEO 0x00001000 /* experienced a jukebox timeout */
-#define NFSSTA_LOCKTIMEO 0x00002000 /* experienced a lock req timeout */
-#define NFSSTA_MOUNTED 0x00004000 /* completely mounted */
-#define NFSSTA_LOCKSWORK 0x00008000 /* lock ops have worked. */
-#define NFSSTA_TIMEO 0x00010000 /* experienced a timeout. */
-#define NFSSTA_FORCE 0x00020000 /* doing a forced unmount. */
-#define NFSSTA_HASWRITEVERF 0x00040000 /* Has write verifier for V3 */
-#define NFSSTA_GOTPATHCONF 0x00080000 /* Got the V3 pathconf info */
-#define NFSSTA_GOTFSINFO 0x00100000 /* Got the V3 fsinfo */
-#define NFSSTA_WANTRQUOTA 0x00200000 /* Want rquota address */
-#define NFSSTA_RQUOTAINPROG 0x00400000 /* Getting rquota address */
-#define NFSSTA_SENDING 0x00800000 /* Sending on socket */
-#define NFSSTA_SNDLOCK 0x01000000 /* Send socket lock */
-#define NFSSTA_WANTSND 0x02000000 /* Want above */
-#define NFSSTA_DEAD 0x04000000 /* mount is dead */
-#define NFSSTA_RECOVER 0x08000000 /* mount state needs to be recovered */
-#define NFSSTA_RECOVER_EXPIRED 0x10000000 /* mount state expired */
-#define NFSSTA_REVOKE 0x20000000 /* need to scan for revoked nodes */
-#define NFSSTA_SQUISHY 0x40000000 /* we can ask to be forcibly unmounted */
-#define NFSSTA_MOUNT_DRAIN 0x80000000 /* mount is draining references */
+#define NFSSTA_MOUNT_THREAD 0x00000040 /* nfs_mount_connect_thread running */
+#define NFSSTA_MONITOR_SCAN 0x00000080 /* scan of monitored nodes in progress */
+#define NFSSTA_UNMOUNTING 0x00000100 /* an unmount attempt is in progress */
+#define NFSSTA_NEEDSECINFO 0x00000200 /* need to fetch security info */
+#define NFSSTA_CLIENTID 0x00000400 /* short client ID is valid */
+#define NFSSTA_BIGCOOKIES 0x00000800 /* have seen >32bit dir cookies */
+#define NFSSTA_JUKEBOXTIMEO 0x00001000 /* experienced a jukebox timeout */
+#define NFSSTA_LOCKTIMEO 0x00002000 /* experienced a lock req timeout */
+#define NFSSTA_MOUNTED 0x00004000 /* completely mounted */
+#define NFSSTA_LOCKSWORK 0x00008000 /* lock ops have worked. */
+#define NFSSTA_TIMEO 0x00010000 /* experienced a timeout. */
+#define NFSSTA_FORCE 0x00020000 /* doing a forced unmount. */
+#define NFSSTA_HASWRITEVERF 0x00040000 /* Has write verifier for V3 */
+#define NFSSTA_GOTPATHCONF 0x00080000 /* Got the V3 pathconf info */
+#define NFSSTA_GOTFSINFO 0x00100000 /* Got the V3 fsinfo */
+#define NFSSTA_WANTRQUOTA 0x00200000 /* Want rquota address */
+#define NFSSTA_RQUOTAINPROG 0x00400000 /* Getting rquota address */
+#define NFSSTA_SENDING 0x00800000 /* Sending on socket */
+#define NFSSTA_SNDLOCK 0x01000000 /* Send socket lock */
+#define NFSSTA_WANTSND 0x02000000 /* Want above */
+#define NFSSTA_DEAD 0x04000000 /* mount is dead */
+#define NFSSTA_RECOVER 0x08000000 /* mount state needs to be recovered */
+#define NFSSTA_RECOVER_EXPIRED 0x10000000 /* mount state expired */
+#define NFSSTA_REVOKE 0x20000000 /* need to scan for revoked nodes */
+#define NFSSTA_SQUISHY 0x40000000 /* we can ask to be forcibly unmounted */
+#define NFSSTA_MOUNT_DRAIN 0x80000000 /* mount is draining references */
-#define nm_ldlink nm_un.v3.ldlink
-#define nm_sent nm_un.v3.udp_sent
-#define nm_cwnd nm_un.v3.udp_cwnd
-#define nm_cwndq nm_un.v3.udp_cwndq
-#define nm_rqproto nm_un.v3.rqproto
-#define nm_rqsaddr nm_un.v3.rqsaddr
-#define nm_rqsaddrstamp nm_un.v3.rqsaddrstamp
-#define nm_longid nm_un.v4.longid
-#define nm_clientid nm_un.v4.clientid
-#define nm_mounttime nm_un.v4.mounttime
-#define nm_fsid nm_un.v4.fsid
-#define nm_renew_timer nm_un.v4.renew_timer
-#define nm_cbid nm_un.v4.cbid
-#define nm_cblink nm_un.v4.cblink
-#define nm_cbrefs nm_un.v4.cbrefs
-#define nm_delegations nm_un.v4.delegations
-#define nm_dreturnq nm_un.v4.dreturnq
+#define nm_ldlink nm_un.v3.ldlink
+#define nm_sent nm_un.v3.udp_sent
+#define nm_cwnd nm_un.v3.udp_cwnd
+#define nm_cwndq nm_un.v3.udp_cwndq
+#define nm_rqproto nm_un.v3.rqproto
+#define nm_rqsaddr nm_un.v3.rqsaddr
+#define nm_rqsaddrstamp nm_un.v3.rqsaddrstamp
+#define nm_longid nm_un.v4.longid
+#define nm_clientid nm_un.v4.clientid
+#define nm_mounttime nm_un.v4.mounttime
+#define nm_fsid nm_un.v4.fsid
+#define nm_renew_timer nm_un.v4.renew_timer
+#define nm_cbid nm_un.v4.cbid
+#define nm_cblink nm_un.v4.cblink
+#define nm_cbrefs nm_un.v4.cbrefs
+#define nm_delegations nm_un.v4.delegations
+#define nm_dreturnq nm_un.v4.dreturnq