projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add some more tracing
[yaffs2.git]
/
yaffs_guts.c
diff --git
a/yaffs_guts.c
b/yaffs_guts.c
index 2736cedc52dab26e45b3973e549c2f39d9dd3521..b90313e5fe408fea035902c9aebcf3a4a60b2041 100644
(file)
--- a/
yaffs_guts.c
+++ b/
yaffs_guts.c
@@
-13,7
+13,7
@@
*/
const char *yaffs_guts_c_version =
*/
const char *yaffs_guts_c_version =
- "$Id: yaffs_guts.c,v 1.4
1 2006-11-07 23:26:52
charles Exp $";
+ "$Id: yaffs_guts.c,v 1.4
4 2006-11-11 23:27:44
charles Exp $";
#include "yportenv.h"
#include "yportenv.h"
@@
-484,13
+484,15
@@
static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
{
static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
{
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
yaffs_InvalidateCheckpoint(dev);
yaffs_MarkBlockBad(dev, blockInNAND);
yaffs_InvalidateCheckpoint(dev);
yaffs_MarkBlockBad(dev, blockInNAND);
- yaffs_GetBlockInfo(dev, blockInNAND)->blockState =
- YAFFS_BLOCK_STATE_DEAD;
+ bi->blockState = YAFFS_BLOCK_STATE_DEAD;
+ bi->gcPrioritise = 0;
+ bi->needsRetiring = 0;
dev->nRetiredBlocks++;
}
dev->nRetiredBlocks++;
}
@@
-530,7
+532,8
@@
void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
static void yaffs_ReportOddballBlocks(yaffs_Device *dev)
{
int i;
static void yaffs_ReportOddballBlocks(yaffs_Device *dev)
{
int i;
- for(i = dev->startBlock; i <= dev->endBlock; i++){
+
+ for(i = dev->internalStartBlock; i <= dev->internalEndBlock && (yaffs_traceMask & YAFFS_TRACE_BAD_BLOCKS); i++){
yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
if(bi->needsRetiring || bi->gcPrioritise)
T(YAFFS_TRACE_BAD_BLOCKS,(TSTR("yaffs block %d%s%s" TENDSTR),
yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
if(bi->needsRetiring || bi->gcPrioritise)
T(YAFFS_TRACE_BAD_BLOCKS,(TSTR("yaffs block %d%s%s" TENDSTR),
@@
-1954,7
+1957,7
@@
static int yaffs_InitialiseBlocks(yaffs_Device * dev)
dev->blockInfoAlt = 0;
/* Set up dynamic blockinfo stuff. */
dev->blockInfoAlt = 0;
/* Set up dynamic blockinfo stuff. */
- dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /
/ round up bytes
+ dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /
* round up bytes */
dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
if(!dev->chunkBits){
dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
if(!dev->chunkBits){
dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
@@
-2053,15
+2056,15
@@
static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
bi = yaffs_GetBlockInfo(dev, i);
for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
bi = yaffs_GetBlockInfo(dev, i);
- if(bi->gcPrioritise)
+ if(bi->gcPrioritise)
{
pendingPrioritisedExist = 1;
pendingPrioritisedExist = 1;
- if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
- bi->gcPrioritise &&
- yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
-
pagesInUse = (bi->pagesInUse - bi->softDeletions)
;
-
dirtiest = i
;
- prioritised = 1;
- aggressive = 1; /* Fool the non-aggressive skip logiv below */
+
if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
+ yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
+ pagesInUse = (bi->pagesInUse - bi->softDeletions);
+
dirtiest = i
;
+
prioritised = 1
;
+ aggressive = 1; /* Fool the non-aggressive skip logiv below */
+ }
}
}
}
}
@@
-2153,6
+2156,11
@@
static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
/* If the block is still healthy erase it and mark as clean.
* If the block has had a data failure, then retire it.
*/
/* If the block is still healthy erase it and mark as clean.
* If the block has had a data failure, then retire it.
*/
+
+ T(YAFFS_TRACE_GC | YAFFS_TRACE_ERASE,
+ (TSTR("yaffs_BlockBecameDirty block %d state %d %s"TENDSTR),
+ blockNo, bi->blockState, (bi->needsRetiring) ? "needs retiring" : ""));
+
bi->blockState = YAFFS_BLOCK_STATE_DIRTY;
if (!bi->needsRetiring) {
bi->blockState = YAFFS_BLOCK_STATE_DIRTY;
if (!bi->needsRetiring) {