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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/nfs/nfs.h
          +++ new/usr/src/uts/common/nfs/nfs.h
↓ open down ↓ 19 lines elided ↑ open up ↑
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
  24   24   */
  25   25  
  26   26  /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T     */
  27   27  /*        All Rights Reserved   */
  28   28  
  29   29  /*
  30      - * Copyright 2018 Nexenta Systems, Inc.
  31   30   * Copyright (c) 2013 by Delphix. All rights reserved.
       31 + * Copyright 2019 Nexenta by DDN, Inc. All rights reserved.
  32   32   */
  33   33  
  34   34  #ifndef _NFS_NFS_H
  35   35  #define _NFS_NFS_H
  36   36  
  37   37  #include <sys/isa_defs.h>
  38   38  #include <sys/vfs.h>
  39   39  #include <sys/stream.h>
  40   40  #include <rpc/types.h>
  41   41  #include <sys/types32.h>
↓ open down ↓ 36 lines elided ↑ open up ↑
  78   78   * can be done properly.
  79   79   */
  80   80  typedef enum {
  81   81          NFS_SERVER_STOPPED,     /* server state destroyed */
  82   82          NFS_SERVER_STOPPING,    /* server state being destroyed */
  83   83          NFS_SERVER_RUNNING,
  84   84          NFS_SERVER_QUIESCED,    /* server state preserved */
  85   85          NFS_SERVER_OFFLINE      /* server pool offline */
  86   86  } nfs_server_running_t;
  87   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 +
  88   95  /*
  89   96   * Zone globals variables of NFS server
  90   97   */
  91   98  typedef struct nfs_globals {
       99 +        list_node_t             nfs_g_link;     /* all globals list */
      100 +
  92  101          rpcvers_t               nfs_versmin;
  93  102          rpcvers_t               nfs_versmax;
  94  103  
  95  104          /* NFS server locks and state */
  96  105          nfs_server_running_t    nfs_server_upordown;
  97  106          kmutex_t                nfs_server_upordown_lock;
  98  107          kcondvar_t              nfs_server_upordown_cv;
  99  108  
 100  109          /* RDMA wait variables */
 101  110          kcondvar_t              rdma_wait_cv;
 102  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 */
 103  120  } nfs_globals_t;
 104  121  
 105  122  /*
 106  123   * Default delegation setting for the server ==> "on"
 107  124   */
 108  125  #define NFS_SERVER_DELEGATION_DEFAULT   (TRUE)
 109  126  
 110  127  /* Maximum size of data portion of a remote request */
 111  128  #define NFS_MAXDATA     8192
 112  129  #define NFS_MAXNAMLEN   255
↓ open down ↓ 779 lines elided ↑ open up ↑
 892  909  extern void     *rfs_rmdir_getfh(struct nfsdiropargs *);
 893  910  extern void     rfs_readdir(struct nfsrddirargs *, struct nfsrddirres *,
 894  911      struct exportinfo *, struct svc_req *, cred_t *, bool_t);
 895  912  extern void     *rfs_readdir_getfh(struct nfsrddirargs *);
 896  913  extern void     rfs_rddirfree(struct nfsrddirres *);
 897  914  extern void     rfs_statfs(fhandle_t *, struct nfsstatfs *, struct exportinfo *,
 898  915      struct svc_req *, cred_t *, bool_t);
 899  916  extern void     *rfs_statfs_getfh(fhandle_t *);
 900  917  extern void     rfs_srvrinit(void);
 901  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 *);
 902  921  
 903  922  /*
 904  923   * flags to define path types during Multi Component Lookups
 905  924   * using the public filehandle
 906  925   */
 907  926  #define URLPATH         0x01    /* Universal Resource Locator path */
 908  927  #define NATIVEPATH      0x02    /* Native path, i.e., via mount protocol */
 909  928  #define SECURITY_QUERY  0x04    /* Security query */
 910  929  
 911  930  /* index for svstat_ptr */
↓ open down ↓ 50 lines elided ↑ open up ↑
 962  981  extern void     nfscopyfh(caddr_t, vnode_t *);
 963  982  extern int      nfs3lookup(vnode_t *, char *, vnode_t **, struct pathname *,
 964  983      int, vnode_t *, cred_t *, int);
 965  984  extern int      nfslookup(vnode_t *, char *, vnode_t **, struct pathname *, int,
 966  985      vnode_t *, cred_t *, int);
 967  986  extern void     sv_free(struct servinfo *);
 968  987  extern int      nfsauth_access(struct exportinfo *, struct svc_req *, cred_t *,
 969  988      uid_t *, gid_t *, uint_t *, gid_t **);
 970  989  extern void     nfsauth_init(void);
 971  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 *);
 972  994  extern int      nfs_setopts(vnode_t *, model_t, struct nfs_args *);
 973  995  extern int      nfs_mount_label_policy(vfs_t *, struct netbuf *,
 974  996      struct knetconfig *, cred_t *);
 975  997  extern boolean_t nfs_has_ctty(void);
      998 +extern nfs_globals_t *nfs_srv_getzg(void);
 976  999  extern void     nfs_srv_stop_all(void);
 977 1000  extern void     nfs_srv_quiesce_all(void);
 978 1001  extern int      rfs4_dss_setpaths(char *, size_t);
 979 1002  extern int      nfs_setmod_check(page_t *);
 980 1003  
 981 1004  extern time_t   rfs4_lease_time;
 982 1005  extern time_t   rfs4_grace_period;
 983 1006  extern nvlist_t *rfs4_dss_paths, *rfs4_dss_oldpaths;
 984 1007  
 985 1008  extern kstat_named_t    *global_svstat_ptr[];
 986 1009  
 987      -extern zone_key_t       rfs4_zone_key;
 988 1010  extern zone_key_t       nfssrv_zone_key;
     1011 +extern list_t           nfssrv_globals_list;
     1012 +extern krwlock_t        nfssrv_globals_rwl;
     1013 +
 989 1014  extern krwlock_t        rroklock;
 990 1015  extern vtype_t          nf_to_vt[];
 991 1016  extern kstat_named_t    *rfsproccnt_v2_ptr;
 992 1017  extern kmutex_t         nfs_minor_lock;
 993 1018  extern int              nfs_major;
 994 1019  extern int              nfs_minor;
 995 1020  extern vfsops_t         *nfs_vfsops;
 996 1021  extern struct vnodeops  *nfs_vnodeops;
 997 1022  extern const struct fs_operation_def nfs_vnodeops_template[];
 998 1023  extern int              nfsfstyp;
↓ open down ↓ 1271 lines elided ↑ open up ↑
2270 2295      struct svc_req *, cred_t *, bool_t);
2271 2296  extern void     *rfs3_fsinfo_getfh(FSINFO3args *);
2272 2297  extern void     rfs3_pathconf(PATHCONF3args *, PATHCONF3res *,
2273 2298      struct exportinfo *, struct svc_req *, cred_t *, bool_t);
2274 2299  extern void     *rfs3_pathconf_getfh(PATHCONF3args *);
2275 2300  extern void     rfs3_commit(COMMIT3args *, COMMIT3res *, struct exportinfo *,
2276 2301      struct svc_req *, cred_t *, bool_t);
2277 2302  extern void     *rfs3_commit_getfh(COMMIT3args *);
2278 2303  extern void     rfs3_srvrinit(void);
2279 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 *);
2280 2307  
2281 2308  extern int      nfs3_validate_caches(vnode_t *, cred_t *);
2282 2309  extern void     nfs3_cache_post_op_attr(vnode_t *, post_op_attr *, hrtime_t,
2283 2310      cred_t *);
2284 2311  extern void     nfs3_cache_post_op_vattr(vnode_t *, post_op_vattr *, hrtime_t,
2285 2312      cred_t *);
2286 2313  extern void     nfs3_cache_wcc_data(vnode_t *, wcc_data *, hrtime_t, cred_t *);
2287 2314  extern void     nfs3_attrcache(vnode_t *, fattr3 *, hrtime_t);
2288 2315  extern int      nfs3_cache_fattr3(vnode_t *, fattr3 *, vattr_t *, hrtime_t,
2289 2316      cred_t *);
↓ open down ↓ 88 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX