changeset 158:0f226b4bb67f

Fix block offset with checkpointing
author charles
date Wed, 08 Nov 2006 00:33:29 +0000
parents 41dac3f9ad92
children 83ae342c96b8
files yaffs_checkptrw.c yaffs_guts.c
diffstat 2 files changed, 10 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/yaffs_checkptrw.c
+++ b/yaffs_checkptrw.c
@@ -43,9 +43,9 @@ static int yaffs_CheckpointErase(yaffs_D
 	if(!dev->eraseBlockInNAND)	
 		return 0;
 	T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
-		dev->startBlock,dev->endBlock));
+		dev->internalStartBlock,dev->internalEndBlock));
 		
-	for(i = dev->startBlock; i <= dev->endBlock; i++) {
+	for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
 		yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
 		if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
 			T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
@@ -73,10 +73,10 @@ static void yaffs_CheckpointFindNextEras
 	int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
 		
 	if(dev->checkpointNextBlock >= 0 &&
-	   dev->checkpointNextBlock <= dev->endBlock &&
+	   dev->checkpointNextBlock <= dev->internalEndBlock &&
 	   blocksAvailable > 0){
 	
-		for(i = dev->checkpointNextBlock; i <= dev->endBlock; i++){
+		for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
 			yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
 			if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
 				dev->checkpointNextBlock = i + 1;
@@ -98,7 +98,7 @@ static void yaffs_CheckpointFindNextChec
 	yaffs_ExtendedTags tags;
 	
 	if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks) 
-		for(i = dev->checkpointNextBlock; i <= dev->endBlock; i++){
+		for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
 			int chunk = i * dev->nChunksPerBlock;
 
 			dev->readChunkWithTagsFromNAND(dev,chunk,NULL,&tags);
@@ -147,7 +147,7 @@ int yaffs_CheckpointOpen(yaffs_Device *d
 	dev->checkpointByteCount = 0;
 	dev->checkpointCurrentBlock = -1;
 	dev->checkpointCurrentChunk = -1;
-	dev->checkpointNextBlock = dev->startBlock;
+	dev->checkpointNextBlock = dev->internalStartBlock;
 	
 	/* Erase all the blocks in the checkpoint area */
 	if(forWriting){
@@ -163,7 +163,7 @@ int yaffs_CheckpointOpen(yaffs_Device *d
 		/* A checkpoint block list of 1 checkpoint block per 16 block is (hopefully)
 		 * going to be way more than we need */
 		dev->blocksInCheckpoint = 0;
-		dev->checkpointMaxBlocks = (dev->endBlock - dev->startBlock)/16 + 2;
+		dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
 		dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
 		for(i = 0; i < dev->checkpointMaxBlocks; i++)
 			dev->checkpointBlockList[i] = -1;
--- a/yaffs_guts.c
+++ b/yaffs_guts.c
@@ -530,7 +530,8 @@ void yaffs_HandleChunkError(yaffs_Device
 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),
@@ -1954,7 +1955,7 @@ static int yaffs_InitialiseBlocks(yaffs_
 		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);