Replace printf with proper tracing
[yaffs2.git] / yaffs_guts.c
index 5aca0d2a3350897727ce7c6d4314a81129ea0689..eff7bd4043c1114c13a9d2d48dd5efbebddc1372 100644 (file)
@@ -11,8 +11,9 @@
  * published by the Free Software Foundation.
  */
 
+
 const char *yaffs_guts_c_version =
-    "$Id: yaffs_guts.c,v 1.71 2009-01-12 00:53:47 charles Exp $";
+    "$Id: yaffs_guts.c,v 1.74 2009-01-18 23:24:08 charles Exp $";
 
 #include "yportenv.h"
 
@@ -751,10 +752,15 @@ static void yaffs_VerifyObject(yaffs_Object *obj)
        __u32 chunkMax;
        
        __u32 chunkIdOk;
-       __u32 chunkIsLive;
+       __u32 chunkInRange;
+       __u32 chunkShouldNotBeDeleted;
+       __u32 chunkValid; 
        
        if(!obj)
                return;
+               
+       if(obj->beingCreated)
+               return;
        
        dev = obj->myDev;
        
@@ -766,21 +772,24 @@ static void yaffs_VerifyObject(yaffs_Object *obj)
        chunkMin = dev->internalStartBlock * dev->nChunksPerBlock;
        chunkMax = (dev->internalEndBlock+1) * dev->nChunksPerBlock - 1;
 
-       chunkIdOk = (((unsigned)(obj->hdrChunk)) >= chunkMin && ((unsigned)(obj->hdrChunk)) <= chunkMax);
-       chunkIsLive = chunkIdOk &&
+       chunkInRange = (((unsigned)(obj->hdrChunk)) >= chunkMin && ((unsigned)(obj->hdrChunk)) <= chunkMax);
+       chunkIdOk = chunkInRange || obj->hdrChunk == 0;
+       chunkValid  =  chunkInRange &&
                        yaffs_CheckChunkBit(dev,
                                            obj->hdrChunk / dev->nChunksPerBlock,
                                            obj->hdrChunk % dev->nChunksPerBlock);
+       chunkShouldNotBeDeleted = chunkInRange && !chunkValid;
+
        if(!obj->fake &&
-           (!chunkIdOk || !chunkIsLive)) {
+           (!chunkIdOk || chunkShouldNotBeDeleted)) {
           T(YAFFS_TRACE_VERIFY,
           (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
           obj->objectId,obj->hdrChunk,
           chunkIdOk ? "" : ",out of range",
-          chunkIsLive || !chunkIdOk ? "" : ",marked as deleted"));
+          chunkShouldNotBeDeleted ? ",marked as deleted" : ""));
        }
        
-       if(chunkIdOk && chunkIsLive &&!yaffs_SkipNANDVerification(dev)) {
+       if(chunkValid &&!yaffs_SkipNANDVerification(dev)) {
                yaffs_ExtendedTags tags;
                yaffs_ObjectHeader *oh;
                __u8 *buffer = yaffs_GetTempBuffer(dev,__LINE__);
@@ -1925,6 +1934,8 @@ static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
                /* Now sweeten it up... */
 
                memset(tn, 0, sizeof(yaffs_Object));
+               tn->beingCreated = 1;
+               
                tn->myDev = dev;
                tn->hdrChunk = 0;
                tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
@@ -1946,6 +1957,8 @@ static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
                if (dev->lostNFoundDir) {
                        yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
                }
+               
+               tn->beingCreated = 0;
        }
        
        dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
@@ -4363,7 +4376,6 @@ static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
                        }
                } else if (level == 0) {
                        __u32 baseOffset = chunkOffset <<  YAFFS_TNODES_LEVEL0_BITS;
-                       /* printf("write tnode at %d\n",baseOffset); */
                        ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
                        if(ok)
                                ok = (yaffs_CheckpointWrite(dev,tn,tnodeSize) == tnodeSize);
@@ -4412,7 +4424,6 @@ static int yaffs_ReadCheckpointTnodes(yaffs_Object *obj)
                /* Read level 0 tnode */
                
                
-               /* printf("read  tnode at %d\n",baseChunk); */
                tn = yaffs_GetTnodeRaw(dev);
                if(tn)
                        ok = (yaffs_CheckpointRead(dev,tn,tnodeSize) == tnodeSize);
@@ -6286,7 +6297,14 @@ static int yaffs_ScanBackwards(yaffs_Device * dev)
 
                                dev->nFreeChunks++;
                                
-                       } else if (tags.chunkId > 0) {
+                       } else if (tags.eccResult == YAFFS_ECC_RESULT_UNFIXED){
+                               T(YAFFS_TRACE_SCAN,
+                                 (TSTR(" Unfixed ECC in chunk(%d:%d), chunk ignored"TENDSTR),
+                                 blk, c));
+
+                               /* Don't actually delete because the chunk is not yet set up as being in use */
+                               /* yaffs_DeleteChunk(dev, chunk, 1, __LINE__); */
+                       }else if (tags.chunkId > 0) {
                                /* chunkId > 0 so it is a data chunk... */
                                unsigned int endpos;
                                __u32 chunkBase =