Use vmalloc for large memory allocations
[yaffs2.git] / yaffs_guts.c
index 90aba83483df0745e8174e5e502c52bbdb507b68..4783f85e92fbed109d200c401714735d83d26f80 100644 (file)
@@ -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.21 2005-10-09 07:55: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;
 }