X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=yaffs_guts.c;h=8a07775aa92bb3201446abe9c18c82dbdadd5c9b;hb=070b41d99c4b50000f05a89e1e71882b7387810e;hp=90aba83483df0745e8174e5e502c52bbdb507b68;hpb=bc0e2592100078d4d216b0945a9a6c779895cf0a;p=yaffs2.git diff --git a/yaffs_guts.c b/yaffs_guts.c index 90aba83..8a07775 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.19 2005-09-20 05:08:50 charles Exp $"; + "$Id: yaffs_guts.c,v 1.22 2005-10-13 02:17:00 charles Exp $"; #include "yportenv.h" @@ -1747,10 +1747,23 @@ static int yaffs_InitialiseBlocks(yaffs_Device * dev, int nBlocks) /* Todo we're assuming the malloc will pass. */ dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo)); + if(!dev->blockInfo){ + dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo)); + dev->blockInfoAlt = 1; + } + else + dev->blockInfoAlt = 0; /* Set up dynamic blockinfo stuff. */ dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks); + if(!dev->chunkBits){ + dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks); + dev->chunkBitsAlt = 1; + } + else + dev->chunkBitsAlt = 0; + if (dev->blockInfo && dev->chunkBits) { memset(dev->blockInfo, 0, nBlocks * sizeof(yaffs_BlockInfo)); memset(dev->chunkBits, 0, dev->chunkBitmapStride * nBlocks); @@ -1763,9 +1776,19 @@ static int yaffs_InitialiseBlocks(yaffs_Device * dev, int nBlocks) static void yaffs_DeinitialiseBlocks(yaffs_Device * dev) { - YFREE(dev->blockInfo); + if(dev->blockInfoAlt) + YFREE_ALT(dev->blockInfo); + else + YFREE(dev->blockInfo); + dev->blockInfoAlt = 0; + dev->blockInfo = NULL; - YFREE(dev->chunkBits); + + if(dev->chunkBitsAlt) + YFREE_ALT(dev->chunkBits); + else + YFREE(dev->chunkBits); + dev->chunkBitsAlt = 0; dev->chunkBits = NULL; } @@ -2637,14 +2660,6 @@ void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn) if (markNAND && bi->blockState != YAFFS_BLOCK_STATE_COLLECTING && !dev->isYaffs2) { -#ifdef CONFIG_MTD_NAND_VERIFY_WRITE - - /* Read data before write, to ensure correct ecc - * if we're using MTD verification under Linux - */ - yaffs_ReadChunkFromNAND(dev, chunkId, NULL, &spare, 0); -#endif - yaffs_InitialiseTags(&tags); tags.chunkDeleted = 1;