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);
|