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.)
@@ -25,12 +25,12 @@
/* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
/*
- * Copyright 2018 Nexenta Systems, Inc.
* Copyright (c) 2013 by Delphix. All rights reserved.
+ * Copyright 2019 Nexenta by DDN, Inc. All rights reserved.
*/
#ifndef _NFS_NFS_H
#define _NFS_NFS_H
@@ -83,14 +83,23 @@
NFS_SERVER_RUNNING,
NFS_SERVER_QUIESCED, /* server state preserved */
NFS_SERVER_OFFLINE /* server pool offline */
} nfs_server_running_t;
+/* Forward declarations for nfs_globals */
+struct nfs_export;
+struct nfs_srv;
+struct nfs3_srv;
+struct nfs4_srv;
+struct nfsauth_globals;
+
/*
* Zone globals variables of NFS server
*/
typedef struct nfs_globals {
+ list_node_t nfs_g_link; /* all globals list */
+
rpcvers_t nfs_versmin;
rpcvers_t nfs_versmax;
/* NFS server locks and state */
nfs_server_running_t nfs_server_upordown;
@@ -98,10 +107,18 @@
kcondvar_t nfs_server_upordown_cv;
/* RDMA wait variables */
kcondvar_t rdma_wait_cv;
kmutex_t rdma_wait_mutex;
+
+ zoneid_t nfs_zoneid;
+ /* Per-zone data structures private to each module */
+ struct nfs_export *nfs_export; /* nfs_export.c */
+ struct nfs_srv *nfs_srv; /* nfs_srv.c */
+ struct nfs3_srv *nfs3_srv; /* nfs3_srv.c */
+ struct nfs4_srv *nfs4_srv; /* nfs4_srv.c */
+ struct nfsauth_globals *nfs_auth; /* nfs_auth.c */
} nfs_globals_t;
/*
* Default delegation setting for the server ==> "on"
*/
@@ -897,10 +914,12 @@
extern void rfs_statfs(fhandle_t *, struct nfsstatfs *, struct exportinfo *,
struct svc_req *, cred_t *, bool_t);
extern void *rfs_statfs_getfh(fhandle_t *);
extern void rfs_srvrinit(void);
extern void rfs_srvrfini(void);
+extern void rfs_srv_zone_init(nfs_globals_t *);
+extern void rfs_srv_zone_fini(nfs_globals_t *);
/*
* flags to define path types during Multi Component Lookups
* using the public filehandle
*/
@@ -967,14 +986,18 @@
extern void sv_free(struct servinfo *);
extern int nfsauth_access(struct exportinfo *, struct svc_req *, cred_t *,
uid_t *, gid_t *, uint_t *, gid_t **);
extern void nfsauth_init(void);
extern void nfsauth_fini(void);
+extern void nfsauth_zone_init(nfs_globals_t *);
+extern void nfsauth_zone_fini(nfs_globals_t *);
+extern void nfsauth_zone_shutdown(nfs_globals_t *);
extern int nfs_setopts(vnode_t *, model_t, struct nfs_args *);
extern int nfs_mount_label_policy(vfs_t *, struct netbuf *,
struct knetconfig *, cred_t *);
extern boolean_t nfs_has_ctty(void);
+extern nfs_globals_t *nfs_srv_getzg(void);
extern void nfs_srv_stop_all(void);
extern void nfs_srv_quiesce_all(void);
extern int rfs4_dss_setpaths(char *, size_t);
extern int nfs_setmod_check(page_t *);
@@ -982,12 +1005,14 @@
extern time_t rfs4_grace_period;
extern nvlist_t *rfs4_dss_paths, *rfs4_dss_oldpaths;
extern kstat_named_t *global_svstat_ptr[];
-extern zone_key_t rfs4_zone_key;
extern zone_key_t nfssrv_zone_key;
+extern list_t nfssrv_globals_list;
+extern krwlock_t nfssrv_globals_rwl;
+
extern krwlock_t rroklock;
extern vtype_t nf_to_vt[];
extern kstat_named_t *rfsproccnt_v2_ptr;
extern kmutex_t nfs_minor_lock;
extern int nfs_major;
@@ -2275,10 +2300,12 @@
extern void rfs3_commit(COMMIT3args *, COMMIT3res *, struct exportinfo *,
struct svc_req *, cred_t *, bool_t);
extern void *rfs3_commit_getfh(COMMIT3args *);
extern void rfs3_srvrinit(void);
extern void rfs3_srvrfini(void);
+extern void rfs3_srv_zone_init(nfs_globals_t *);
+extern void rfs3_srv_zone_fini(nfs_globals_t *);
extern int nfs3_validate_caches(vnode_t *, cred_t *);
extern void nfs3_cache_post_op_attr(vnode_t *, post_op_attr *, hrtime_t,
cred_t *);
extern void nfs3_cache_post_op_vattr(vnode_t *, post_op_vattr *, hrtime_t,