From ff9d7654a9ce1e878ef356ecc6754713a25f0a95 Mon Sep 17 00:00:00 2001 From: Chas Williams Date: Sun, 20 Mar 2005 20:19:20 +0000 Subject: [PATCH] STABLE14-linux-crref-held-longer-20050320 FIXES 17917 hold the cr ref longer we were putting it too soon (cherry picked from commit 5a8f1057b0e9d07246af9213b8388dee0a64fd41) --- src/afs/LINUX/osi_cred.c | 14 +++++++------- src/afs/LINUX/osi_machdep.h | 5 +---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/afs/LINUX/osi_cred.c b/src/afs/LINUX/osi_cred.c index 9cad7168a..6795d3f57 100644 --- a/src/afs/LINUX/osi_cred.c +++ b/src/afs/LINUX/osi_cred.c @@ -54,11 +54,11 @@ crget(void) osi_Panic("crget: No more memory for creds!\n"); for (i = 0; i < CRED_ALLOC_STEP - 1; i++) - cred_pool[i].cr_ref = (long)&cred_pool[i + 1]; - cred_pool[i].cr_ref = 0; + 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_ref; + cred_pool = (cred_t *) tmp->cr_next; ncreds_inuse++; CRED_UNLOCK(); @@ -74,15 +74,15 @@ void crfree(cred_t * cr) { if (cr->cr_ref > 1) { -#if defined(AFS_LINUX26_ENV) - put_group_info(cr->cr_group_info); -#endif cr->cr_ref--; return; } +#if defined(AFS_LINUX26_ENV) + put_group_info(cr->cr_group_info); +#endif CRED_LOCK(); - cr->cr_ref = (long)cred_pool; + cr->cr_next = (cred_t *) cred_pool; cred_pool = cr; CRED_UNLOCK(); ncreds_inuse--; diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h index 03ba34ef5..e3c8c1a16 100644 --- a/src/afs/LINUX/osi_machdep.h +++ b/src/afs/LINUX/osi_machdep.h @@ -141,11 +141,7 @@ extern struct vnodeops afs_file_iops, afs_dir_iops, afs_symlink_iops; /* cred struct */ typedef struct cred { /* maps to task field: */ -#if (CPU == sparc64) - long cr_ref; -#else int cr_ref; -#endif uid_t cr_uid; /* euid */ uid_t cr_ruid; /* uid */ gid_t cr_gid; /* egid */ @@ -156,6 +152,7 @@ typedef struct cred { /* maps to task field: */ gid_t cr_groups[NGROUPS]; /* 32 groups - empty set to NOGROUP */ int cr_ngroups; #endif + struct cred *cr_next; } cred_t; #define AFS_UCRED cred #define AFS_PROC struct task_struct -- 2.39.5