Print this page
Fix NFS design problems re. multiple zone keys
Make NFS server zone-specific data all have the same lifetime
Fix rfs4_clean_state_exi
Fix exi_cache_reclaim
Fix mistakes in zone keys work
More fixes re. exi_zoneid and exi_tree
(danmcd -> Keep some ASSERT()s around for readability.)


  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  24  */
  25 
  26 /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
  27 /*        All Rights Reserved   */
  28 
  29 /*
  30  * Copyright 2018 Nexenta Systems, Inc.
  31  * Copyright (c) 2013 by Delphix. All rights reserved.

  32  */
  33 
  34 #ifndef _NFS_NFS_H
  35 #define _NFS_NFS_H
  36 
  37 #include <sys/isa_defs.h>
  38 #include <sys/vfs.h>
  39 #include <sys/stream.h>
  40 #include <rpc/types.h>
  41 #include <sys/types32.h>
  42 #ifdef _KERNEL
  43 #include <rpc/rpc_rdma.h>
  44 #include <rpc/rpc.h>
  45 #include <sys/fcntl.h>
  46 #include <sys/kstat.h>
  47 #include <sys/dirent.h>
  48 #include <sys/zone.h>
  49 #include <sys/tsol/label.h>
  50 #include <sys/nvpair.h>
  51 #include <nfs/mount.h>


  68 #define NFS_PORT        2049
  69 
  70 /*
  71  * Used to determine registration and service handling of versions
  72  */
  73 #define NFS_VERSMIN_DEFAULT     ((rpcvers_t)2)
  74 #define NFS_VERSMAX_DEFAULT     ((rpcvers_t)4)
  75 
  76 /*
  77  * Used to track the state of the server so that initialization
  78  * can be done properly.
  79  */
  80 typedef enum {
  81         NFS_SERVER_STOPPED,     /* server state destroyed */
  82         NFS_SERVER_STOPPING,    /* server state being destroyed */
  83         NFS_SERVER_RUNNING,
  84         NFS_SERVER_QUIESCED,    /* server state preserved */
  85         NFS_SERVER_OFFLINE      /* server pool offline */
  86 } nfs_server_running_t;
  87 







  88 /*
  89  * Zone globals variables of NFS server
  90  */
  91 typedef struct nfs_globals {


  92         rpcvers_t               nfs_versmin;
  93         rpcvers_t               nfs_versmax;
  94 
  95         /* NFS server locks and state */
  96         nfs_server_running_t    nfs_server_upordown;
  97         kmutex_t                nfs_server_upordown_lock;
  98         kcondvar_t              nfs_server_upordown_cv;
  99 
 100         /* RDMA wait variables */
 101         kcondvar_t              rdma_wait_cv;
 102         kmutex_t                rdma_wait_mutex;








 103 } nfs_globals_t;
 104 
 105 /*
 106  * Default delegation setting for the server ==> "on"
 107  */
 108 #define NFS_SERVER_DELEGATION_DEFAULT   (TRUE)
 109 
 110 /* Maximum size of data portion of a remote request */
 111 #define NFS_MAXDATA     8192
 112 #define NFS_MAXNAMLEN   255
 113 #define NFS_MAXPATHLEN  1024
 114 
 115 /*
 116  * Rpc retransmission parameters
 117  */
 118 #define NFS_TIMEO       11      /* initial timeout for clts in 10th of a sec */
 119 #define NFS_RETRIES     5       /* times to retry request */
 120 #define NFS_COTS_TIMEO  600     /* initial timeout for cots in 10th of a sec */
 121 
 122 /*


 882     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 883 extern void     *rfs_link_getfh(struct nfslinkargs *);
 884 extern void     rfs_symlink(struct nfsslargs *, enum nfsstat *,
 885     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 886 extern void     *rfs_symlink_getfh(struct nfsslargs *);
 887 extern void     rfs_mkdir(struct nfscreatargs *, struct nfsdiropres *,
 888     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 889 extern void     *rfs_mkdir_getfh(struct nfscreatargs *);
 890 extern void     rfs_rmdir(struct nfsdiropargs *, enum nfsstat *,
 891     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 892 extern void     *rfs_rmdir_getfh(struct nfsdiropargs *);
 893 extern void     rfs_readdir(struct nfsrddirargs *, struct nfsrddirres *,
 894     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 895 extern void     *rfs_readdir_getfh(struct nfsrddirargs *);
 896 extern void     rfs_rddirfree(struct nfsrddirres *);
 897 extern void     rfs_statfs(fhandle_t *, struct nfsstatfs *, struct exportinfo *,
 898     struct svc_req *, cred_t *, bool_t);
 899 extern void     *rfs_statfs_getfh(fhandle_t *);
 900 extern void     rfs_srvrinit(void);
 901 extern void     rfs_srvrfini(void);


 902 
 903 /*
 904  * flags to define path types during Multi Component Lookups
 905  * using the public filehandle
 906  */
 907 #define URLPATH         0x01    /* Universal Resource Locator path */
 908 #define NATIVEPATH      0x02    /* Native path, i.e., via mount protocol */
 909 #define SECURITY_QUERY  0x04    /* Security query */
 910 
 911 /* index for svstat_ptr */
 912 enum nfs_svccounts {NFS_CALLS, NFS_BADCALLS, NFS_REFERRALS, NFS_REFERLINKS};
 913 
 914 /*      function defs for NFS kernel */
 915 extern int      nfs_waitfor_purge_complete(vnode_t *);
 916 extern int      nfs_validate_caches(vnode_t *, cred_t *);
 917 extern void     nfs_purge_caches(vnode_t *, int, cred_t *);
 918 extern void     nfs_purge_rddir_cache(vnode_t *);
 919 extern void     nfs_attrcache(vnode_t *, struct nfsfattr *, hrtime_t);
 920 extern int      nfs_cache_fattr(vnode_t *, struct nfsfattr *, vattr_t *,
 921     hrtime_t, cred_t *);


 952 extern void     nfs_perror(int, char *, ...);
 953 extern void     nfs_cmn_err(int, int, char *, ...);
 954 extern int      nfs_addcllock(vnode_t *, struct flock64 *);
 955 extern void     nfs_rmcllock(vnode_t *, struct flock64 *);
 956 extern void     nfs_lockrelease(vnode_t *, int, offset_t, cred_t *);
 957 extern int      vattr_to_nattr(struct vattr *, struct nfsfattr *);
 958 extern int      mount_root(char *, char *, int, struct nfs_args *, int *);
 959 extern void     nfs_lockcompletion(vnode_t *, int);
 960 extern void     nfs_add_locking_id(vnode_t *, pid_t, int, char *, int);
 961 extern void     nfs3copyfh(caddr_t, vnode_t *);
 962 extern void     nfscopyfh(caddr_t, vnode_t *);
 963 extern int      nfs3lookup(vnode_t *, char *, vnode_t **, struct pathname *,
 964     int, vnode_t *, cred_t *, int);
 965 extern int      nfslookup(vnode_t *, char *, vnode_t **, struct pathname *, int,
 966     vnode_t *, cred_t *, int);
 967 extern void     sv_free(struct servinfo *);
 968 extern int      nfsauth_access(struct exportinfo *, struct svc_req *, cred_t *,
 969     uid_t *, gid_t *, uint_t *, gid_t **);
 970 extern void     nfsauth_init(void);
 971 extern void     nfsauth_fini(void);



 972 extern int      nfs_setopts(vnode_t *, model_t, struct nfs_args *);
 973 extern int      nfs_mount_label_policy(vfs_t *, struct netbuf *,
 974     struct knetconfig *, cred_t *);
 975 extern boolean_t nfs_has_ctty(void);

 976 extern void     nfs_srv_stop_all(void);
 977 extern void     nfs_srv_quiesce_all(void);
 978 extern int      rfs4_dss_setpaths(char *, size_t);
 979 extern int      nfs_setmod_check(page_t *);
 980 
 981 extern time_t   rfs4_lease_time;
 982 extern time_t   rfs4_grace_period;
 983 extern nvlist_t *rfs4_dss_paths, *rfs4_dss_oldpaths;
 984 
 985 extern kstat_named_t    *global_svstat_ptr[];
 986 
 987 extern zone_key_t       rfs4_zone_key;
 988 extern zone_key_t       nfssrv_zone_key;



 989 extern krwlock_t        rroklock;
 990 extern vtype_t          nf_to_vt[];
 991 extern kstat_named_t    *rfsproccnt_v2_ptr;
 992 extern kmutex_t         nfs_minor_lock;
 993 extern int              nfs_major;
 994 extern int              nfs_minor;
 995 extern vfsops_t         *nfs_vfsops;
 996 extern struct vnodeops  *nfs_vnodeops;
 997 extern const struct fs_operation_def nfs_vnodeops_template[];
 998 extern int              nfsfstyp;
 999 extern void             (*nfs_srv_quiesce_func)(void);
1000 extern int              (*nfs_srv_dss_func)(char *, size_t);
1001 
1002 /*
1003  * Per-zone stats as consumed by nfsstat(1m)
1004  */
1005 struct nfs_version_stats {
1006         kstat_named_t   *aclreqcnt_ptr;         /* nfs_acl:0:aclreqcnt_v? */
1007         kstat_named_t   *aclproccnt_ptr;        /* nfs_acl:0:aclproccnt_v? */
1008         kstat_named_t   *rfsreqcnt_ptr;         /* nfs:0:rfsreqcnt_v? */


2260 extern void     *rfs3_readdir_getfh(READDIR3args *);
2261 extern void     rfs3_readdir_free(READDIR3res *);
2262 extern void     rfs3_readdirplus(READDIRPLUS3args *, READDIRPLUS3res *,
2263     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
2264 extern void     *rfs3_readdirplus_getfh(READDIRPLUS3args *);
2265 extern void     rfs3_readdirplus_free(READDIRPLUS3res *);
2266 extern void     rfs3_fsstat(FSSTAT3args *, FSSTAT3res *, struct exportinfo *,
2267     struct svc_req *, cred_t *, bool_t);
2268 extern void     *rfs3_fsstat_getfh(FSSTAT3args *);
2269 extern void     rfs3_fsinfo(FSINFO3args *, FSINFO3res *, struct exportinfo *,
2270     struct svc_req *, cred_t *, bool_t);
2271 extern void     *rfs3_fsinfo_getfh(FSINFO3args *);
2272 extern void     rfs3_pathconf(PATHCONF3args *, PATHCONF3res *,
2273     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
2274 extern void     *rfs3_pathconf_getfh(PATHCONF3args *);
2275 extern void     rfs3_commit(COMMIT3args *, COMMIT3res *, struct exportinfo *,
2276     struct svc_req *, cred_t *, bool_t);
2277 extern void     *rfs3_commit_getfh(COMMIT3args *);
2278 extern void     rfs3_srvrinit(void);
2279 extern void     rfs3_srvrfini(void);


2280 
2281 extern int      nfs3_validate_caches(vnode_t *, cred_t *);
2282 extern void     nfs3_cache_post_op_attr(vnode_t *, post_op_attr *, hrtime_t,
2283     cred_t *);
2284 extern void     nfs3_cache_post_op_vattr(vnode_t *, post_op_vattr *, hrtime_t,
2285     cred_t *);
2286 extern void     nfs3_cache_wcc_data(vnode_t *, wcc_data *, hrtime_t, cred_t *);
2287 extern void     nfs3_attrcache(vnode_t *, fattr3 *, hrtime_t);
2288 extern int      nfs3_cache_fattr3(vnode_t *, fattr3 *, vattr_t *, hrtime_t,
2289     cred_t *);
2290 extern int      nfs3_getattr_otw(vnode_t *, struct vattr *, cred_t *);
2291 extern int      nfs3getattr(vnode_t *, struct vattr *, cred_t *);
2292 extern int      fattr3_to_vattr(vnode_t *, fattr3 *, struct vattr *);
2293 extern int      nfs3tsize(void);
2294 extern uint_t   nfs3_tsize(struct knetconfig *);
2295 extern uint_t   rfs3_tsize(struct svc_req *);
2296 extern int      vattr_to_sattr3(struct vattr *, sattr3 *);
2297 extern void     setdiropargs3(diropargs3 *, char *, vnode_t *);
2298 extern enum nfsstat3 puterrno3(int);
2299 extern int      geterrno3(enum nfsstat3);




  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  24  */
  25 
  26 /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
  27 /*        All Rights Reserved   */
  28 
  29 /*

  30  * Copyright (c) 2013 by Delphix. All rights reserved.
  31  * Copyright 2019 Nexenta by DDN, Inc. All rights reserved.
  32  */
  33 
  34 #ifndef _NFS_NFS_H
  35 #define _NFS_NFS_H
  36 
  37 #include <sys/isa_defs.h>
  38 #include <sys/vfs.h>
  39 #include <sys/stream.h>
  40 #include <rpc/types.h>
  41 #include <sys/types32.h>
  42 #ifdef _KERNEL
  43 #include <rpc/rpc_rdma.h>
  44 #include <rpc/rpc.h>
  45 #include <sys/fcntl.h>
  46 #include <sys/kstat.h>
  47 #include <sys/dirent.h>
  48 #include <sys/zone.h>
  49 #include <sys/tsol/label.h>
  50 #include <sys/nvpair.h>
  51 #include <nfs/mount.h>


  68 #define NFS_PORT        2049
  69 
  70 /*
  71  * Used to determine registration and service handling of versions
  72  */
  73 #define NFS_VERSMIN_DEFAULT     ((rpcvers_t)2)
  74 #define NFS_VERSMAX_DEFAULT     ((rpcvers_t)4)
  75 
  76 /*
  77  * Used to track the state of the server so that initialization
  78  * can be done properly.
  79  */
  80 typedef enum {
  81         NFS_SERVER_STOPPED,     /* server state destroyed */
  82         NFS_SERVER_STOPPING,    /* server state being destroyed */
  83         NFS_SERVER_RUNNING,
  84         NFS_SERVER_QUIESCED,    /* server state preserved */
  85         NFS_SERVER_OFFLINE      /* server pool offline */
  86 } nfs_server_running_t;
  87 
  88 /* Forward declarations for nfs_globals */
  89 struct nfs_export;
  90 struct nfs_srv;
  91 struct nfs3_srv;
  92 struct nfs4_srv;
  93 struct nfsauth_globals;
  94 
  95 /*
  96  * Zone globals variables of NFS server
  97  */
  98 typedef struct nfs_globals {
  99         list_node_t             nfs_g_link;     /* all globals list */
 100 
 101         rpcvers_t               nfs_versmin;
 102         rpcvers_t               nfs_versmax;
 103 
 104         /* NFS server locks and state */
 105         nfs_server_running_t    nfs_server_upordown;
 106         kmutex_t                nfs_server_upordown_lock;
 107         kcondvar_t              nfs_server_upordown_cv;
 108 
 109         /* RDMA wait variables */
 110         kcondvar_t              rdma_wait_cv;
 111         kmutex_t                rdma_wait_mutex;
 112 
 113         zoneid_t                nfs_zoneid;
 114         /* Per-zone data structures private to each module */
 115         struct nfs_export       *nfs_export;    /* nfs_export.c */
 116         struct nfs_srv          *nfs_srv;       /* nfs_srv.c */
 117         struct nfs3_srv         *nfs3_srv;      /* nfs3_srv.c */
 118         struct nfs4_srv         *nfs4_srv;      /* nfs4_srv.c */
 119         struct nfsauth_globals  *nfs_auth;      /* nfs_auth.c */
 120 } nfs_globals_t;
 121 
 122 /*
 123  * Default delegation setting for the server ==> "on"
 124  */
 125 #define NFS_SERVER_DELEGATION_DEFAULT   (TRUE)
 126 
 127 /* Maximum size of data portion of a remote request */
 128 #define NFS_MAXDATA     8192
 129 #define NFS_MAXNAMLEN   255
 130 #define NFS_MAXPATHLEN  1024
 131 
 132 /*
 133  * Rpc retransmission parameters
 134  */
 135 #define NFS_TIMEO       11      /* initial timeout for clts in 10th of a sec */
 136 #define NFS_RETRIES     5       /* times to retry request */
 137 #define NFS_COTS_TIMEO  600     /* initial timeout for cots in 10th of a sec */
 138 
 139 /*


 899     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 900 extern void     *rfs_link_getfh(struct nfslinkargs *);
 901 extern void     rfs_symlink(struct nfsslargs *, enum nfsstat *,
 902     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 903 extern void     *rfs_symlink_getfh(struct nfsslargs *);
 904 extern void     rfs_mkdir(struct nfscreatargs *, struct nfsdiropres *,
 905     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 906 extern void     *rfs_mkdir_getfh(struct nfscreatargs *);
 907 extern void     rfs_rmdir(struct nfsdiropargs *, enum nfsstat *,
 908     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 909 extern void     *rfs_rmdir_getfh(struct nfsdiropargs *);
 910 extern void     rfs_readdir(struct nfsrddirargs *, struct nfsrddirres *,
 911     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 912 extern void     *rfs_readdir_getfh(struct nfsrddirargs *);
 913 extern void     rfs_rddirfree(struct nfsrddirres *);
 914 extern void     rfs_statfs(fhandle_t *, struct nfsstatfs *, struct exportinfo *,
 915     struct svc_req *, cred_t *, bool_t);
 916 extern void     *rfs_statfs_getfh(fhandle_t *);
 917 extern void     rfs_srvrinit(void);
 918 extern void     rfs_srvrfini(void);
 919 extern void     rfs_srv_zone_init(nfs_globals_t *);
 920 extern void     rfs_srv_zone_fini(nfs_globals_t *);
 921 
 922 /*
 923  * flags to define path types during Multi Component Lookups
 924  * using the public filehandle
 925  */
 926 #define URLPATH         0x01    /* Universal Resource Locator path */
 927 #define NATIVEPATH      0x02    /* Native path, i.e., via mount protocol */
 928 #define SECURITY_QUERY  0x04    /* Security query */
 929 
 930 /* index for svstat_ptr */
 931 enum nfs_svccounts {NFS_CALLS, NFS_BADCALLS, NFS_REFERRALS, NFS_REFERLINKS};
 932 
 933 /*      function defs for NFS kernel */
 934 extern int      nfs_waitfor_purge_complete(vnode_t *);
 935 extern int      nfs_validate_caches(vnode_t *, cred_t *);
 936 extern void     nfs_purge_caches(vnode_t *, int, cred_t *);
 937 extern void     nfs_purge_rddir_cache(vnode_t *);
 938 extern void     nfs_attrcache(vnode_t *, struct nfsfattr *, hrtime_t);
 939 extern int      nfs_cache_fattr(vnode_t *, struct nfsfattr *, vattr_t *,
 940     hrtime_t, cred_t *);


 971 extern void     nfs_perror(int, char *, ...);
 972 extern void     nfs_cmn_err(int, int, char *, ...);
 973 extern int      nfs_addcllock(vnode_t *, struct flock64 *);
 974 extern void     nfs_rmcllock(vnode_t *, struct flock64 *);
 975 extern void     nfs_lockrelease(vnode_t *, int, offset_t, cred_t *);
 976 extern int      vattr_to_nattr(struct vattr *, struct nfsfattr *);
 977 extern int      mount_root(char *, char *, int, struct nfs_args *, int *);
 978 extern void     nfs_lockcompletion(vnode_t *, int);
 979 extern void     nfs_add_locking_id(vnode_t *, pid_t, int, char *, int);
 980 extern void     nfs3copyfh(caddr_t, vnode_t *);
 981 extern void     nfscopyfh(caddr_t, vnode_t *);
 982 extern int      nfs3lookup(vnode_t *, char *, vnode_t **, struct pathname *,
 983     int, vnode_t *, cred_t *, int);
 984 extern int      nfslookup(vnode_t *, char *, vnode_t **, struct pathname *, int,
 985     vnode_t *, cred_t *, int);
 986 extern void     sv_free(struct servinfo *);
 987 extern int      nfsauth_access(struct exportinfo *, struct svc_req *, cred_t *,
 988     uid_t *, gid_t *, uint_t *, gid_t **);
 989 extern void     nfsauth_init(void);
 990 extern void     nfsauth_fini(void);
 991 extern void     nfsauth_zone_init(nfs_globals_t *);
 992 extern void     nfsauth_zone_fini(nfs_globals_t *);
 993 extern void     nfsauth_zone_shutdown(nfs_globals_t *);
 994 extern int      nfs_setopts(vnode_t *, model_t, struct nfs_args *);
 995 extern int      nfs_mount_label_policy(vfs_t *, struct netbuf *,
 996     struct knetconfig *, cred_t *);
 997 extern boolean_t nfs_has_ctty(void);
 998 extern nfs_globals_t *nfs_srv_getzg(void);
 999 extern void     nfs_srv_stop_all(void);
1000 extern void     nfs_srv_quiesce_all(void);
1001 extern int      rfs4_dss_setpaths(char *, size_t);
1002 extern int      nfs_setmod_check(page_t *);
1003 
1004 extern time_t   rfs4_lease_time;
1005 extern time_t   rfs4_grace_period;
1006 extern nvlist_t *rfs4_dss_paths, *rfs4_dss_oldpaths;
1007 
1008 extern kstat_named_t    *global_svstat_ptr[];
1009 

1010 extern zone_key_t       nfssrv_zone_key;
1011 extern list_t           nfssrv_globals_list;
1012 extern krwlock_t        nfssrv_globals_rwl;
1013 
1014 extern krwlock_t        rroklock;
1015 extern vtype_t          nf_to_vt[];
1016 extern kstat_named_t    *rfsproccnt_v2_ptr;
1017 extern kmutex_t         nfs_minor_lock;
1018 extern int              nfs_major;
1019 extern int              nfs_minor;
1020 extern vfsops_t         *nfs_vfsops;
1021 extern struct vnodeops  *nfs_vnodeops;
1022 extern const struct fs_operation_def nfs_vnodeops_template[];
1023 extern int              nfsfstyp;
1024 extern void             (*nfs_srv_quiesce_func)(void);
1025 extern int              (*nfs_srv_dss_func)(char *, size_t);
1026 
1027 /*
1028  * Per-zone stats as consumed by nfsstat(1m)
1029  */
1030 struct nfs_version_stats {
1031         kstat_named_t   *aclreqcnt_ptr;         /* nfs_acl:0:aclreqcnt_v? */
1032         kstat_named_t   *aclproccnt_ptr;        /* nfs_acl:0:aclproccnt_v? */
1033         kstat_named_t   *rfsreqcnt_ptr;         /* nfs:0:rfsreqcnt_v? */


2285 extern void     *rfs3_readdir_getfh(READDIR3args *);
2286 extern void     rfs3_readdir_free(READDIR3res *);
2287 extern void     rfs3_readdirplus(READDIRPLUS3args *, READDIRPLUS3res *,
2288     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
2289 extern void     *rfs3_readdirplus_getfh(READDIRPLUS3args *);
2290 extern void     rfs3_readdirplus_free(READDIRPLUS3res *);
2291 extern void     rfs3_fsstat(FSSTAT3args *, FSSTAT3res *, struct exportinfo *,
2292     struct svc_req *, cred_t *, bool_t);
2293 extern void     *rfs3_fsstat_getfh(FSSTAT3args *);
2294 extern void     rfs3_fsinfo(FSINFO3args *, FSINFO3res *, struct exportinfo *,
2295     struct svc_req *, cred_t *, bool_t);
2296 extern void     *rfs3_fsinfo_getfh(FSINFO3args *);
2297 extern void     rfs3_pathconf(PATHCONF3args *, PATHCONF3res *,
2298     struct exportinfo *, struct svc_req *, cred_t *, bool_t);
2299 extern void     *rfs3_pathconf_getfh(PATHCONF3args *);
2300 extern void     rfs3_commit(COMMIT3args *, COMMIT3res *, struct exportinfo *,
2301     struct svc_req *, cred_t *, bool_t);
2302 extern void     *rfs3_commit_getfh(COMMIT3args *);
2303 extern void     rfs3_srvrinit(void);
2304 extern void     rfs3_srvrfini(void);
2305 extern void     rfs3_srv_zone_init(nfs_globals_t *);
2306 extern void     rfs3_srv_zone_fini(nfs_globals_t *);
2307 
2308 extern int      nfs3_validate_caches(vnode_t *, cred_t *);
2309 extern void     nfs3_cache_post_op_attr(vnode_t *, post_op_attr *, hrtime_t,
2310     cred_t *);
2311 extern void     nfs3_cache_post_op_vattr(vnode_t *, post_op_vattr *, hrtime_t,
2312     cred_t *);
2313 extern void     nfs3_cache_wcc_data(vnode_t *, wcc_data *, hrtime_t, cred_t *);
2314 extern void     nfs3_attrcache(vnode_t *, fattr3 *, hrtime_t);
2315 extern int      nfs3_cache_fattr3(vnode_t *, fattr3 *, vattr_t *, hrtime_t,
2316     cred_t *);
2317 extern int      nfs3_getattr_otw(vnode_t *, struct vattr *, cred_t *);
2318 extern int      nfs3getattr(vnode_t *, struct vattr *, cred_t *);
2319 extern int      fattr3_to_vattr(vnode_t *, fattr3 *, struct vattr *);
2320 extern int      nfs3tsize(void);
2321 extern uint_t   nfs3_tsize(struct knetconfig *);
2322 extern uint_t   rfs3_tsize(struct svc_req *);
2323 extern int      vattr_to_sattr3(struct vattr *, sattr3 *);
2324 extern void     setdiropargs3(diropargs3 *, char *, vnode_t *);
2325 extern enum nfsstat3 puterrno3(int);
2326 extern int      geterrno3(enum nfsstat3);