*** empty log message ***
[yaffs/.git] / yaffs_guts.c
index 47059771ef3727dd21f413947425f20a1a85ec63..cfe955f8ca306e7298b24a56f1534a42171557a3 100644 (file)
@@ -14,7 +14,7 @@
  */
  //yaffs_guts.c
 
-const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.17 2003-01-17 04:19:08 charles Exp $";
+const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.20 2003-01-31 03:30:33 charles Exp $";
 
 #include "yportenv.h"
 
@@ -1149,8 +1149,10 @@ static int yaffs_SoftDeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level
                        {
                            if(tn->level0[i])
                        {
-                                       
                                        theChunk =  (tn->level0[i] << in->myDev->chunkGroupBits);
+                                       T(YAFFS_TRACE_SCAN,(TSTR("soft delete tch %d cgb %d chunk %d" TENDSTR),
+                                               tn->level0[i],in->myDev->chunkGroupBits,theChunk));
+                                               
                                        theBlock =      yaffs_GetBlockInfo(in->myDev,  theChunk/in->myDev->nChunksPerBlock);
                                        if(theBlock)
                                        {
@@ -2012,6 +2014,7 @@ static int yaffs_FindDirtiestBlock(yaffs_Device *dev,int aggressive)
        }
        else
        {
+               iterations = dev->endBlock - dev->startBlock + 1;
                iterations = iterations / 16;
                if(iterations > 200)
                {
@@ -2139,7 +2142,7 @@ static int yaffs_AllocateChunk(yaffs_Device *dev,int useReserve)
                dev->allocationPage = 0;
        }
        
-       if(!useReserve &&  dev->nErasedBlocks <= YAFFS_RESERVED_BLOCKS)
+       if(!useReserve &&  dev->nErasedBlocks <= dev->nReservedBlocks)
        {
                // Not enough space to allocate unless we're allowed to use the reserve.
                return -1;
@@ -2181,7 +2184,7 @@ static int yaffs_AllocateChunk(yaffs_Device *dev,int useReserve)
 
 static int yaffs_CheckSpaceForChunkCache(yaffs_Device *dev)
 {
-       return (dev->nErasedBlocks >= YAFFS_RESERVED_BLOCKS);
+       return (dev->nErasedBlocks >= dev->nReservedBlocks);
 }
 
 
@@ -2362,7 +2365,7 @@ static int yaffs_CheckGarbageCollection(yaffs_Device *dev)
        
        //yaffs_DoUnlinkedFileDeletion(dev);
        
-       if(dev->nErasedBlocks <= (YAFFS_RESERVED_BLOCKS + YAFFS_GARBAGE_COLLECT_LOW_WATER))
+       if(dev->nErasedBlocks <= (dev->nReservedBlocks + YAFFS_GARBAGE_COLLECT_LOW_WATER))
        {
                aggressive = 1;
        }               
@@ -2402,7 +2405,7 @@ static int yaffs_CheckGarbageCollection(yaffs_Device *dev)
        
        //yaffs_DoUnlinkedFileDeletion(dev);
        
-       if(dev->nErasedBlocks <= (YAFFS_RESERVED_BLOCKS + 1))
+       if(dev->nErasedBlocks <= (dev->nReservedBlocks + 1))
        {
                aggressive = 1;
        }               
@@ -4599,6 +4602,20 @@ int yaffs_GutsInitialise(yaffs_Device *dev)
        int extraBits;
        int nBlocks;
 
+       if(     dev->nBytesPerChunk != YAFFS_BYTES_PER_CHUNK ||
+       
+               dev->nChunksPerBlock < 2 ||
+               dev->nReservedBlocks < 2 ||
+               dev->startBlock <= 0 ||
+               dev->endBlock <= 0 ||
+               dev->endBlock <= (dev->startBlock + dev->nReservedBlocks)
+         )
+       {
+               //these parameters must be set before stating yaffs
+               // Other parameters startBlock,
+               return YAFFS_FAIL;
+       }
+
 
        
        if(!yaffs_CheckStructures())
@@ -4655,9 +4672,6 @@ int yaffs_GutsInitialise(yaffs_Device *dev)
        }
        dev->chunkGroupSize = 1 << dev->chunkGroupBits;
        
-       // Stuff to be taken out later
-       dev->nBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
-       dev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
        
        
        // More device initialisation
@@ -4742,6 +4756,7 @@ void yaffs_Deinitialise(yaffs_Device *dev)
                yaffs_DeinitialiseBlocks(dev);
                yaffs_DeinitialiseTnodes(dev);
                yaffs_DeinitialiseObjects(dev);
+               YFREE(dev->localBuffer);
        }
        
 }