*/
//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"
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))
{
}
+ dev->isDoingGC = 0;
+
//yaffs_VerifyFreeChunks(dev);
return YAFFS_OK;
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.
dev->tagsEccUnfixed=0;
dev->nErasureFailures = 0;
dev->nErasedBlocks = 0;
+ dev->isDoingGC = 0;
//dev->localBuffer = YMALLOC(dev->nBytesPerChunk);
// Initialise temporary buffers
*
* 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__
int nFreeTnodes;
yaffs_TnodeList *allocatedTnodeList;
+ int isDoingGC;
int nObjectsCreated;
yaffs_Object *freeObjects;