yaffs Fix incorrect handling of deletion flag
[yaffs2.git] / yaffs_guts.h
index dabcfe6e5d77b1247f746b945e07005d808dad40..3647d6bce6cd629dfcc483edead75c5519809a17 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
  *
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2010 Aleph One Ltd.
  *   for Toby Churchill Ltd and Brightstar Engineering
  *
  * Created by Charles Manning <charles@aleph1.co.uk>
@@ -606,6 +606,7 @@ struct yaffs_DeviceParamStruct {
        int useHeaderFileSize;  /* Flag to determine if we should use file sizes from the header */
        int disableLazyLoad;    /* Disable lazy loading on this device */
        int wideTnodesDisabled; /* Set to disable wide tnodes */
+       int disableSoftDelete;  /* yaffs 1 only: Set to disable the use of softdeletion. */
        
        int deferDirectoryUpdate; /* Set to defer directory updates */
        
@@ -688,10 +689,6 @@ struct yaffs_DeviceStruct {
        int nFreeTnodes;
        yaffs_TnodeList *allocatedTnodeList;
 
-       int isDoingGC;
-       int gcBlock;
-       int gcChunk;
-
        int nObjectsCreated;
        yaffs_Object *freeObjects;
        int nFreeObjects;
@@ -705,12 +702,18 @@ struct yaffs_DeviceStruct {
 
        int nFreeChunks;
 
-       int currentDirtyChecker;        /* Used to find current dirtiest block */
-
+       /* Garbage collection control */
        __u32 *gcCleanupList;   /* objects to delete at the end of a GC. */
-       int nonAggressiveSkip;  /* GC state/mode */
 
-       int hasPendingPrioritisedGCs; /* We think this device might have pending prioritised gcs */
+       unsigned hasPendingPrioritisedGCs; /* We think this device might have pending prioritised gcs */
+       unsigned gcDisable;
+       unsigned gcBlockFinder;
+       unsigned gcDirtiest;
+       unsigned gcPagesInUse;
+       unsigned gcNotDone;
+       unsigned gcBlock;
+       unsigned gcChunk;
+       unsigned gcSkip;
 
        /* Special directories */
        yaffs_Object *rootDir;
@@ -745,6 +748,7 @@ struct yaffs_DeviceStruct {
        /* yaffs2 runtime stuff */
        unsigned sequenceNumber;        /* Sequence number of currently allocating block */
        unsigned oldestDirtySequence;
+       unsigned oldestDirtyBlock;
 
        /* Block refreshing */
        int refreshSkip;        /* A skip down counter. Refresh happens when this gets to zero. */
@@ -759,8 +763,10 @@ struct yaffs_DeviceStruct {
        __u32 nBlockErasures;
        __u32 nErasureFailures;
        __u32 nGCCopies;
-       __u32 garbageCollections;
-       __u32 passiveGarbageCollections;
+       __u32 allGCs;
+       __u32 passiveGCs;
+       __u32 oldestDirtyGCs;
+       __u32 backgroundGCs;
        __u32 nRetriedWrites;
        __u32 nRetiredBlocks;
        __u32 eccFixed;
@@ -891,9 +897,9 @@ void yfsd_WinFileTimeNow(__u32 target[2]);
 
 void yaffs_HandleDeferedFree(yaffs_Object *obj);
 
-
 void yaffs_UpdateDirtyDirectories(yaffs_Device *dev);
 
+int yaffs_BackgroundGarbageCollect(yaffs_Device *dev, unsigned urgency);
 
 /* Debug dump  */
 int yaffs_DumpObject(yaffs_Object *obj);