diff options
author | Jeff Darcy <jdarcy@redhat.com> | 2012-04-27 11:36:57 -0400 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2012-06-01 15:03:20 -0700 |
commit | 8efd28456db7fa68aabc355a8fc217430b5bf97a (patch) | |
tree | acc6a2dcc7fa52014a7e55843c49590501a8b3cf /xlators/nfs/server/src/nfs.h | |
parent | 14c88a74175e921a724a747e140b95f2f631bdf4 (diff) |
Add server-side aux-GID resolution.
Change-Id: I09bcbfa41c7c31894ae35f24086bef2d90035ccc
BUG: 827457
Signed-off-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.com/3241
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
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 4c6d039f8d2..d2a0c134318 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 |