From 01c0e029f7eea96f2892df9dd570f019660cfd8b Mon Sep 17 00:00:00 2001 From: Chas Williams Date: Tue, 19 Dec 2006 02:28:19 +0000 Subject: [PATCH] linux-osi-cred-pool-byebye-20061218 ok, unneeded abstraction removed. --- src/afs/LINUX/osi_cred.c | 60 ++++++++-------------------------------- 1 file changed, 11 insertions(+), 49 deletions(-) diff --git a/src/afs/LINUX/osi_cred.c b/src/afs/LINUX/osi_cred.c index 612e4f00d..d5465dc9a 100644 --- a/src/afs/LINUX/osi_cred.c +++ b/src/afs/LINUX/osi_cred.c @@ -20,53 +20,18 @@ RCSID #include "afs/sysincludes.h" #include "afsincludes.h" -/* Setup a pool for creds. Allocate several at a time. */ -#define CRED_ALLOC_STEP 29 /* at 140 bytes/cred = 4060 bytes. */ - - -static cred_t *cred_pool = NULL; -int cred_allocs = 0; -int ncreds_inuse = 0; - -/* Cred locking assumes current single threaded non-preemptive kernel. - * Also assuming a fast path through both down and up if no waiters. Otherwise, - * test if no creds in pool before grabbing lock in crfree(). - */ -#if defined(AFS_LINUX24_ENV) -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) -static DEFINE_MUTEX(linux_cred_pool_lock); -#else -static DECLARE_MUTEX(linux_cred_pool_lock); -#endif -#else -static struct semaphore linux_cred_pool_lock = MUTEX; -#endif -#define CRED_LOCK() down(&linux_cred_pool_lock) -#define CRED_UNLOCK() up(&linux_cred_pool_lock) - cred_t * crget(void) { cred_t *tmp; - int i; - - CRED_LOCK(); - if (!cred_pool) { - cred_allocs++; - cred_pool = (cred_t *) osi_Alloc(CRED_ALLOC_STEP * sizeof(cred_t)); - if (!cred_pool) - osi_Panic("crget: No more memory for creds!\n"); - - for (i = 0; i < CRED_ALLOC_STEP - 1; i++) - cred_pool[i].cr_next = (cred_t *) &cred_pool[i + 1]; - cred_pool[i].cr_next = NULL; - } - tmp = cred_pool; - cred_pool = (cred_t *) tmp->cr_next; - ncreds_inuse++; - CRED_UNLOCK(); - - memset(tmp, 0, sizeof(cred_t)); + +#if !defined(GFP_NOFS) +#define GFP_NOFS GFP_KERNEL +#endif + tmp = kmalloc(sizeof(cred_t), GFP_NOFS); + if (!tmp) + osi_Panic("crget: No more memory for creds!\n"); + tmp->cr_ref = 1; return tmp; } @@ -82,11 +47,8 @@ crfree(cred_t * cr) #if defined(AFS_LINUX26_ENV) put_group_info(cr->cr_group_info); #endif - CRED_LOCK(); - cr->cr_next = (cred_t *) cred_pool; - cred_pool = cr; - CRED_UNLOCK(); - ncreds_inuse--; + + kfree(cr); } @@ -99,6 +61,7 @@ crdup(cred_t * cr) tmp->cr_uid = cr->cr_uid; tmp->cr_ruid = cr->cr_ruid; tmp->cr_gid = cr->cr_gid; + tmp->cr_rgid = cr->cr_rgid; #if defined(AFS_LINUX26_ENV) get_group_info(cr->cr_group_info); @@ -108,7 +71,6 @@ crdup(cred_t * cr) tmp->cr_ngroups = cr->cr_ngroups; #endif - tmp->cr_ref = 1; return tmp; } -- 2.39.5