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,36 **** /* 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. */ #ifndef _NFS_NFS_H #define _NFS_NFS_H --- 25,36 ---- /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /* * 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,96 **** --- 83,105 ---- 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,107 **** --- 107,124 ---- 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,906 **** --- 914,925 ---- 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,980 **** --- 986,1003 ---- 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,993 **** 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 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; --- 1005,1018 ---- 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 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,2284 **** --- 2300,2311 ---- 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,