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,