static int yaffs_AllocateChunk(yaffs_Device *dev,int useReserve);
-#if YAFFS_PARANOID
-static int yaffs_CheckFileSanity(yaffs_Object *in)
+#ifdef YAFFS_PARANOID
+static int yaffs_CheckFileSanity(yaffs_Object *in);
#else
#define yaffs_CheckFileSanity(in)
#endif
return retVal;
}
+#ifdef YAFFS_PARANOID
+
+static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,int chunkInNAND)
+{
+ static int init = 0;
+ static __u8 cmpbuf[YAFFS_BYTES_PER_CHUNK];
+ static __u8 data[YAFFS_BYTES_PER_CHUNK];
+ static __u8 spare[16];
+
+ int retVal;
+
+ retVal = YAFFS_OK;
+
+ dev->readChunkFromNAND(dev,chunkInNAND,data,(yaffs_Spare *)spare);
+
+
+
+ if(!init)
+ {
+ memset(cmpbuf,0xff,YAFFS_BYTES_PER_CHUNK);
+ init = 1;
+ }
+
+ if(memcmp(cmpbuf,data,YAFFS_BYTES_PER_CHUNK)) retVal = YAFFS_FAIL;
+ if(memcmp(cmpbuf,spare,16)) retVal = YAFFS_FAIL;
+
+ return retVal;
+
+}
+
+#endif
+
+
int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,int blockInNAND)
{
return dev->eraseBlockInNAND(dev,blockInNAND);
}
#ifdef YAFFS_PARANOID
- if(yaffs_CheckChunkErased(retVal) == YAFFS_FAIL)
+ if(yaffs_CheckChunkErased(dev,retVal) == YAFFS_FAIL)
{
T(("..................Trying to allocate non-erased page %d\n",retVal));
}
theChunk = tn->level0[chunkInInode & YAFFS_TNODES_LEVEL0_MASK] << dev->chunkGroupBits;
// Now we need to do the shifting etc and search for it
- for(i = 0,found = 0; i < dev->chunkGroupSize && !found; i++)
+ for(i = 0,found = 0; theChunk && i < dev->chunkGroupSize && !found; i++)
{
yaffs_ReadChunkTagsFromNAND(dev,theChunk,tags);
if(tags->chunkId == chunkInInode &&
theChunk = tn->level0[chunkInInode & YAFFS_TNODES_LEVEL0_MASK] << dev->chunkGroupBits;
// Now we need to do the shifting etc and search for it
- for(i = 0,found = 0; i < dev->chunkGroupSize && !found; i++)
+ for(i = 0,found = 0; theChunk && i < dev->chunkGroupSize && !found; i++)
{
yaffs_ReadChunkTagsFromNAND(dev,theChunk,tags);
if(tags->chunkId == chunkInInode &&
for(chunk = 1; chunk <= nChunks; chunk++)
{
- tn = yaffs_FindLevel0Tnode(&in->variant.fileVariant, chunk);
+ tn = yaffs_FindLevel0Tnode(in->myDev,&in->variant.fileVariant, chunk);
if(tn)
{
- theChunk = tn->level0[chunk & YAFFS_TNODES_LEVEL0_MASK] << dev->chunkGroupBits;
+ theChunk = tn->level0[chunk & YAFFS_TNODES_LEVEL0_MASK] << in->myDev->chunkGroupBits;
- yaffs_ReadChunkTagsFromNAND(theChunk,tags);
+ yaffs_ReadChunkTagsFromNAND(in->myDev,theChunk,tags);
if(tags->chunkId == chunk &&
tags->objectId == in->objectId)
{
// found it;
-
+
}
else
{
int retVal;
if(in->dirty)
{
+ T(("flushing object header\n"));
retVal = yaffs_UpdateObjectHeader(in,NULL);
}
else