Mercurial > yaffs-ecoscentric
diff yaffs_guts.c @ 93:2b4deace2c2f
Add support for vmallocing large blockInfos
| author | charles |
|---|---|
| date | Fri, 07 Oct 2005 03:46:50 +0100 |
| parents | eeca349affa6 |
| children | ed3b54386260 |
line wrap: on
line diff
--- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -1747,6 +1747,12 @@ static int yaffs_InitialiseBlocks(yaffs_ /* 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; @@ -1763,7 +1769,12 @@ static int yaffs_InitialiseBlocks(yaffs_ 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); dev->chunkBits = NULL;
