summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharles <charles>2006-11-08 09:52:12 +0000
committercharles <charles>2006-11-08 09:52:12 +0000
commitffc75c3d0b5d9b3544c9fef3bcd8c0c0ae0bb6ad (patch)
tree9185fff0d7590bc8eecb06d709033c745ee275b2
parent5dcdf77ef2af74d01edb41d8eadee55176c33cad (diff)
Changes to retirement handling
-rw-r--r--yaffs_guts.c24
-rw-r--r--yaffs_nand.c5
2 files changed, 14 insertions, 15 deletions
diff --git a/yaffs_guts.c b/yaffs_guts.c
index a5e8f67..f87a94a 100644
--- a/yaffs_guts.c
+++ b/yaffs_guts.c
@@ -13,7 +13,7 @@
*/
const char *yaffs_guts_c_version =
- "$Id: yaffs_guts.c,v 1.42 2006-11-08 00:33:29 charles Exp $";
+ "$Id: yaffs_guts.c,v 1.43 2006-11-08 09:52:12 charles Exp $";
#include "yportenv.h"
@@ -484,13 +484,15 @@ static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
{
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(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++;
}
@@ -2054,15 +2056,15 @@ static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
bi = yaffs_GetBlockInfo(dev, i);
- if(bi->gcPrioritise)
+ if(bi->gcPrioritise) {
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 */
+ }
}
}
diff --git a/yaffs_nand.c b/yaffs_nand.c
index 8c4f639..14ae330 100644
--- a/yaffs_nand.c
+++ b/yaffs_nand.c
@@ -13,7 +13,7 @@
*/
const char *yaffs_nand_c_version =
- "$Id: yaffs_nand.c,v 1.4 2006-10-13 08:52:49 charles Exp $";
+ "$Id: yaffs_nand.c,v 1.5 2006-11-08 09:52:12 charles Exp $";
#include "yaffs_nand.h"
#include "yaffs_tagscompat.h"
@@ -123,9 +123,6 @@ int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
dev->nBlockErasures++;
result = dev->eraseBlockInNAND(dev, blockInNAND);
- /* If at first we don't succeed, try again *once*.*/
- if (!result)
- result = dev->eraseBlockInNAND(dev, blockInNAND);
return result;
}