*/
const char *yaffs_checkptrw_c_version =
- "$Id: yaffs_checkptrw.c,v 1.5 2006-10-03 10:13:03 charles Exp $";
+ "$Id: yaffs_checkptrw.c,v 1.8 2006-11-09 19:55:24 charles Exp $";
#include "yaffs_checkptrw.h"
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++) {
- yaffs_BlockInfo *bi = &dev->blockInfo[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));
if(dev->eraseBlockInNAND(dev,i)){
{
int i;
int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
+ T(YAFFS_TRACE_CHECKPOINT,
+ (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
+ dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
if(dev->checkpointNextBlock >= 0 &&
- dev->checkpointNextBlock <= dev->endBlock &&
+ dev->checkpointNextBlock <= dev->internalEndBlock &&
blocksAvailable > 0){
- for(i = dev->checkpointNextBlock; i <= dev->endBlock; i++){
- yaffs_BlockInfo *bi = &dev->blockInfo[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;
dev->checkpointCurrentBlock = i;
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);
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){
/* 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;
if(dev->checkpointCurrentChunk == 0){
/* First chunk we write for the block? Set block state to
checkpoint */
- yaffs_BlockInfo *bi = &dev->blockInfo[dev->checkpointCurrentBlock];
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
dev->blocksInCheckpoint++;
}
} else {
int i;
for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
- yaffs_BlockInfo *bi = &dev->blockInfo[dev->checkpointBlockList[i]];
+ yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
else {