summaryrefslogtreecommitdiffstats
path: root/xlators/nfs/server/src/nfs.h
diff options
context:
space:
mode:
authorJeff Darcy <jdarcy@redhat.com>2012-04-27 11:36:57 -0400
committerAnand Avati <avati@redhat.com>2012-06-01 15:03:20 -0700
commit8efd28456db7fa68aabc355a8fc217430b5bf97a (patch)
treeacc6a2dcc7fa52014a7e55843c49590501a8b3cf /xlators/nfs/server/src/nfs.h
parent14c88a74175e921a724a747e140b95f2f631bdf4 (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.h29
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