From: charles Date: Tue, 26 Jul 2005 03:05:28 +0000 (+0000) Subject: Prevent recursive gc X-Git-Tag: pre-name-change~462 X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=commitdiff_plain;h=c6b03b32a79d425c28ac2de255a89135c19f5f15 Prevent recursive gc --- diff --git a/yaffs_guts.c b/yaffs_guts.c index c776e78..02723f7 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -14,7 +14,7 @@ */ //yaffs_guts.c -const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.9 2005-07-18 23:16:04 charles Exp $"; +const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.10 2005-07-26 03:05:28 charles Exp $"; #include "yportenv.h" @@ -2417,6 +2417,7 @@ int yaffs_GarbageCollectBlock(yaffs_Device *dev,int block) dev->nFreeChunks -= bi->softDeletions; // Take off the number of soft deleted entries because // they're going to get really deleted during GC. + dev->isDoingGC = 1; if(!yaffs_StillSomeChunkBits(dev,block)) { @@ -2549,6 +2550,8 @@ int yaffs_GarbageCollectBlock(yaffs_Device *dev,int block) } + dev->isDoingGC = 0; + //yaffs_VerifyFreeChunks(dev); return YAFFS_OK; @@ -2634,9 +2637,13 @@ int yaffs_CheckGarbageCollection(yaffs_Device *dev) int gcOk = YAFFS_OK; int maxTries = 0; - //yaffs_DoUnlinkedFileDeletion(dev); - //yaffs_VerifyFreeChunks(dev); + + if(dev->isDoingGC) + { + // Bail out so we don't get recursive gc + return YAFFS_OK; + } // This loop should pass the first time. // We'll only see looping here if the erase of the collected block fails. @@ -6017,6 +6024,7 @@ int yaffs_GutsInitialise(yaffs_Device *dev) dev->tagsEccUnfixed=0; dev->nErasureFailures = 0; dev->nErasedBlocks = 0; + dev->isDoingGC = 0; //dev->localBuffer = YMALLOC(dev->nBytesPerChunk); // Initialise temporary buffers diff --git a/yaffs_guts.h b/yaffs_guts.h index cf8f5f7..1fb8b87 100644 --- a/yaffs_guts.h +++ b/yaffs_guts.h @@ -14,7 +14,7 @@ * * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL. * - * $Id: yaffs_guts.h,v 1.8 2005-07-18 23:16:04 charles Exp $ + * $Id: yaffs_guts.h,v 1.9 2005-07-26 03:05:28 charles Exp $ */ #ifndef __YAFFS_GUTS_H__ @@ -583,6 +583,7 @@ struct yaffs_DeviceStruct int nFreeTnodes; yaffs_TnodeList *allocatedTnodeList; + int isDoingGC; int nObjectsCreated; yaffs_Object *freeObjects;