projects
/
yaffs2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for vmallocing large blockInfos
[yaffs2.git]
/
yaffs_guts.c
diff --git
a/yaffs_guts.c
b/yaffs_guts.c
index 90aba83483df0745e8174e5e502c52bbdb507b68..eafbaa996e57054305f4104fa6c8003a00d26f9d 100644
(file)
--- a/
yaffs_guts.c
+++ b/
yaffs_guts.c
@@
-13,7
+13,7
@@
*/
const char *yaffs_guts_c_version =
*/
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.
20 2005-10-07 02:46:49
charles Exp $";
#include "yportenv.h"
#include "yportenv.h"
@@
-1747,6
+1747,12
@@
static int yaffs_InitialiseBlocks(yaffs_Device * dev, int nBlocks)
/* Todo we're assuming the malloc will pass. */
dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
/* 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;
/* Set up dynamic blockinfo stuff. */
dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8;
@@
-1763,7
+1769,12
@@
static int yaffs_InitialiseBlocks(yaffs_Device * dev, int nBlocks)
static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
{
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;
dev->blockInfo = NULL;
YFREE(dev->chunkBits);
dev->chunkBits = NULL;