From 4ca1bd85c73eaac505984cc5e8aa94f89ae09b33 Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Wed, 25 Mar 2009 19:34:59 +0000 Subject: [PATCH] STABLE14-cbr-free-what-you-alloc-20090325 LICENSE IPL10 FIXES 124531 dequeue and free items as alloc'd (cherry picked from commit 80494f5096d231e1e032229732f2d94ba569718e) --- src/afs/afs_vcache.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/afs/afs_vcache.c b/src/afs/afs_vcache.c index 4a214e4ea..dbf49fae4 100644 --- a/src/afs/afs_vcache.c +++ b/src/afs/afs_vcache.c @@ -315,6 +315,8 @@ afs_InactiveVCache(struct vcache *avc, struct AFS_UCRED *acred) * held, so we don't have to worry about blocking in osi_Alloc. */ static struct afs_cbr *afs_cbrSpace = 0; +/* if alloc limit below changes, fix me! */ +static struct afs_cbr *afs_cbrHeads[2]; struct afs_cbr * afs_AllocCBR(void) { @@ -336,6 +338,7 @@ afs_AllocCBR(void) } tsp[AFS_NCBRS - 1].next = 0; afs_cbrSpace = tsp; + afs_cbrHeads[afs_stats_cmperf.CallBackAlloced] = tsp; afs_stats_cmperf.CallBackAlloced++; } } @@ -3136,8 +3139,9 @@ shutdown_vcache(void) /* * Free any leftover callback queue */ - for (tsp = afs_cbrSpace; tsp; tsp = nsp) { - nsp = tsp->next; + for (i = 0; i < afs_stats_cmperf.CallBackAlloced; i++) { + tsp = afs_cbrHeads[i]; + afs_cbrHeads[i] = 0; afs_osi_Free((char *)tsp, AFS_NCBRS * sizeof(struct afs_cbr)); } afs_cbrSpace = 0; -- 2.39.5