X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_checkptrw.c;h=4481bbcd210550a6b300541fd426bde29469ea69;hp=40d792366f76268e44a6759cdc38f4a1531b989f;hb=1a60bf00885822831b6553b58ec5236d385f07a3;hpb=3e5718ec7f0df7b76837d10583419b745cb27474 diff --git a/yaffs_checkptrw.c b/yaffs_checkptrw.c index 40d7923..4481bbc 100644 --- a/yaffs_checkptrw.c +++ b/yaffs_checkptrw.c @@ -12,7 +12,7 @@ */ const char *yaffs_checkptrw_c_version = - "$Id: yaffs_checkptrw.c,v 1.18 2009-03-06 17:20:49 wookey Exp $"; + "$Id: yaffs_checkptrw.c,v 1.20 2009-09-09 03:03:01 charles Exp $"; #include "yaffs_checkptrw.h" @@ -43,6 +43,9 @@ static int yaffs_CheckpointErase(yaffs_Device *dev) 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)); + + dev->nBlockErasures++; + if (dev->eraseBlockInNAND(dev, i - dev->blockOffset /* realign */)) { bi->blockState = YAFFS_BLOCK_STATE_EMPTY; dev->nErasedBlocks++; @@ -168,6 +171,9 @@ int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting) dev->blocksInCheckpoint = 0; dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2; dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks); + if(!dev->checkpointBlockList) + return 0; + for (i = 0; i < dev->checkpointMaxBlocks; i++) dev->checkpointBlockList[i] = -1; } @@ -219,6 +225,8 @@ static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev) realignedChunk = chunk - dev->chunkOffset; + dev->nPageWrites++; + dev->writeChunkWithTagsToNAND(dev, realignedChunk, dev->checkpointBuffer, &tags); dev->checkpointByteOffset = 0; @@ -306,6 +314,8 @@ int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes) dev->checkpointCurrentChunk; realignedChunk = chunk - dev->chunkOffset; + + dev->nPageReads++; /* read in the next chunk */ /* printf("read checkpoint page %d\n",dev->checkpointPage); */