diff options
Diffstat (limited to 'xlators/nfs/server/src/nfs.h')
-rw-r--r-- | xlators/nfs/server/src/nfs.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/xlators/nfs/server/src/nfs.h b/xlators/nfs/server/src/nfs.h index 4c6d039f8..d2a0c1343 100644 --- a/xlators/nfs/server/src/nfs.h +++ b/xlators/nfs/server/src/nfs.h @@ -65,6 +65,27 @@ struct nfs_initer_list { rpcsvc_program_t *program; }; +/* + * TBD: make the cache size tunable + * + * The current size represents a pretty trivial amount of memory, and should + * provide good hit rates even for quite busy systems. If we ever want to + * support really large cache sizes, we'll need to do dynamic allocation + * instead of just defining an array within nfs_state. It doesn't make a + * whole lot of sense to change the associativity, because it won't improve + * hit rates all that much and will increase the maintenance cost as we have + * to scan more entries with every lookup/update. + */ +#define AUX_GID_CACHE_ASSOC 4 +#define AUX_GID_CACHE_BUCKETS 256 +#define AUX_GID_CACHE_SIZE (AUX_GID_CACHE_ASSOC * AUX_GID_CACHE_BUCKETS) + +typedef struct { + uid_t uid; + int gid_count; + gid_t *gid_list; + time_t deadline; +} aux_gid_list_t; struct nfs_state { rpcsvc_t *rpcsvc; @@ -88,6 +109,11 @@ struct nfs_state { int enable_nlm; int mount_udp; struct rpc_clnt *rpc_clnt; + gf_boolean_t server_aux_gids; + gf_lock_t aux_gid_lock; + uint32_t aux_gid_max_age; + unsigned int aux_gid_nbuckets; + aux_gid_list_t aux_gid_cache[AUX_GID_CACHE_SIZE]; }; #define gf_nfs_dvm_on(nfsstt) (((struct nfs_state *)nfsstt)->dynamicvolumes == GF_NFS_DVM_ON) @@ -126,4 +152,7 @@ nfs_request_primary_user_init (nfs_user_t *nfu, rpcsvc_request_t *req, uid_t uid, gid_t gid); extern int nfs_subvolume_started (struct nfs_state *nfs, xlator_t *xl); + +extern void +nfs_fix_groups (xlator_t *this, call_stack_t *root); #endif |