From 9b7e78b048869e0319a369912d9fef63288dca7f Mon Sep 17 00:00:00 2001 From: Chas Williams Date: Tue, 25 Jan 2005 20:19:17 +0000 Subject: [PATCH] unpin-out-of-order-oops-20050125 FIXES 17346 unpin before freeing --- src/afs/afs_call.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index ea2857a..9266fd7 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -2617,10 +2617,10 @@ afs_icl_LogFreeUse(register struct afs_icl_log *logp) ObtainWriteLock(&logp->lock, 189); if (--logp->setCount == 0) { /* no more users -- free it (but keep log structure around) */ - afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize); #ifdef KERNEL_HAVE_PIN unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize); #endif + afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize); logp->firstUsed = logp->firstFree = 0; logp->logElements = 0; logp->datap = NULL; @@ -2643,10 +2643,10 @@ afs_icl_LogSetSize(register struct afs_icl_log *logp, afs_int32 logSize) logp->logElements = 0; /* free and allocate a new one */ - afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize); #ifdef KERNEL_HAVE_PIN unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize); #endif + afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize); logp->datap = (afs_int32 *) afs_osi_Alloc(sizeof(afs_int32) * logSize); #ifdef KERNEL_HAVE_PIN @@ -2670,7 +2670,10 @@ afs_icl_ZapLog(register struct afs_icl_log *logp) /* found the dude we want to remove */ *lpp = logp->nextp; osi_FreeSmallSpace(logp->name); - osi_FreeSmallSpace(logp->datap); +#ifdef KERNEL_HAVE_PIN + unpin((char *)logp->datap, sizeof(afs_int32) * logp->logSize); +#endif + afs_osi_Free(logp->datap, sizeof(afs_int32) * logp->logSize); osi_FreeSmallSpace(logp); break; /* won't find it twice */ } @@ -2928,10 +2931,10 @@ afs_icl_ZapSet(register struct afs_icl_set *setp) /* found the dude we want to remove */ *lpp = setp->nextp; osi_FreeSmallSpace(setp->name); - afs_osi_Free(setp->eventFlags, ICL_DEFAULTEVENTS); #ifdef KERNEL_HAVE_PIN unpin((char *)setp->eventFlags, ICL_DEFAULTEVENTS); #endif + afs_osi_Free(setp->eventFlags, ICL_DEFAULTEVENTS); for (i = 0; i < ICL_LOGSPERSET; i++) { if ((tlp = setp->logs[i])) afs_icl_LogReleNL(tlp); -- 1.9.4