/* Callback to mark the superblock dirty */
void (*markSuperBlockDirty)(struct yaffs_DeviceStruct *dev);
+
+ /* Callback to control garbage collection. */
+ unsigned (*gcControl)(struct yaffs_DeviceStruct *dev);
/* Debug control flags. Don't use unless you know what you're doing */
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 */
int nFreeTnodes;
yaffs_TnodeList *allocatedTnodeList;
- int isDoingGC;
- int gcBlock;
- int gcChunk;
-
int nObjectsCreated;
yaffs_Object *freeObjects;
int nFreeObjects;
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;
/* 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. */
/* Statistcs */
- int nPageWrites;
- int nPageReads;
- int nBlockErasures;
- int nErasureFailures;
- int nGCCopies;
- int garbageCollections;
- int passiveGarbageCollections;
- int nRetriedWrites;
- int nRetiredBlocks;
- int eccFixed;
- int eccUnfixed;
- int tagsEccFixed;
- int tagsEccUnfixed;
- int nDeletions;
- int nUnmarkedDeletions;
- int refreshCount;
- int cacheHits;
+ __u32 nPageWrites;
+ __u32 nPageReads;
+ __u32 nBlockErasures;
+ __u32 nErasureFailures;
+ __u32 nGCCopies;
+ __u32 garbageCollections;
+ __u32 passiveGarbageCollections;
+ __u32 nRetriedWrites;
+ __u32 nRetiredBlocks;
+ __u32 eccFixed;
+ __u32 eccUnfixed;
+ __u32 tagsEccFixed;
+ __u32 tagsEccUnfixed;
+ __u32 nDeletions;
+ __u32 nUnmarkedDeletions;
+ __u32 refreshCount;
+ __u32 cacheHits;
};
void yaffs_HandleDeferedFree(yaffs_Object *obj);
-
void yaffs_UpdateDirtyDirectories(yaffs_Device *dev);
+int yaffs_BackgroundGarbageCollect(yaffs_Device *dev);
/* Debug dump */
int yaffs_DumpObject(yaffs_Object *obj);