yaffsfs.c: Fix NULL dereference in yaffs_unmount2_reldev()
[yaffs2.git] / direct / test-framework / yaffs_ramem2k.c
index 715ae77c97fd95b90088ddd73850fd9187430e92..73195c9a3f2ba2372b0ac2d55690008275a6aaed 100644 (file)
@@ -1,8 +1,7 @@
 /*
  * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
  *
- * Copyright (C) 2002-2011 Aleph One Ltd.
- *   for Toby Churchill Ltd and Brightstar Engineering
+ * Copyright (C) 2002-2018 Aleph One Ltd.
  *
  * Created by Charles Manning <charles@aleph1.co.uk>
  *
@@ -49,7 +48,7 @@
 #define BLOCKS_PER_MEG ((1<<20)/(PAGES_PER_BLOCK * PAGE_DATA_SIZE))
 
 
-typedef struct 
+typedef struct
 {
        u8 data[PAGE_TOTAL_SIZE]; // Data + spare
        int empty;      // is this empty?
@@ -59,7 +58,7 @@ typedef struct
 typedef struct
 {
        nandemul_Page *page[PAGES_PER_BLOCK];
-       int damaged;    
+       int damaged;
 } nandemul_Block;
 
 
@@ -77,6 +76,7 @@ static int sizeInMB = EM_SIZE_IN_MEG;
 
 static void nandemul_yield(int n)
 {
+       (void)n;
 #ifdef __KERNEL__
        if(n > 0) schedule_timeout(n);
 #endif
@@ -87,16 +87,16 @@ static void nandemul_yield(int n)
 static void nandemul_ReallyEraseBlock(int blockNumber)
 {
        int i;
-       
+
        nandemul_Block *blk;
-       
+
        if(blockNumber < 0 || blockNumber >= ned.nBlocks)
        {
                return;
        }
-       
+
        blk = ned.block[blockNumber];
-       
+
        for(i = 0; i < PAGES_PER_BLOCK; i++)
        {
                memset(blk->page[i],0xff,sizeof(nandemul_Page));
@@ -116,40 +116,40 @@ static int nandemul2k_CalcNBlocks(void)
 static int  CheckInit(void)
 {
        static int initialised = 0;
-       
+
        int i,j;
-       
+
        int fail = 0;
-       int nBlocks; 
+       int nBlocks;
 
        int nAllocated = 0;
-       
-       if(initialised) 
+
+       if(initialised)
        {
                return YAFFS_OK;
        }
-       
-       
+
+
        ned.nBlocks = nBlocks = nandemul2k_CalcNBlocks();
 
-       
+
        ned.block = malloc(sizeof(nandemul_Block*) * nBlocks );
-       
+
        if(!ned.block) return YAFFS_FAIL;
-       
-       
-       
 
-               
+
+
+
+
        for(i=fail=0; i <nBlocks; i++)
        {
-               
+
                nandemul_Block *blk;
-               
+
                if(!(blk = ned.block[i] = malloc(sizeof(nandemul_Block))))
                {
                 fail = 1;
-               }  
+               }
                else
                {
                        for(j = 0; j < PAGES_PER_BLOCK; j++)
@@ -164,27 +164,29 @@ static int  CheckInit(void)
                        nAllocated++;
                }
        }
-       
+
        if(fail)
        {
                //Todo thump pages
-               
+
                for(i = 0; i < nAllocated; i++)
                {
                        kfree(ned.block[i]);
                }
                kfree(ned.block);
-               
+
+               (void) sizeInMB;
+
                yaffs_trace(YAFFS_TRACE_ALWAYS,
                        "Allocation failed, could only allocate %dMB of %dMB requested.\n",
-                       nAllocated/64,sizeInMB);
+                       nAllocated/64, sizeInMB);
                return 0;
        }
-       
+
        ned.nBlocks = nBlocks;
-       
+
        initialised = 1;
-       
+
        return 1;
 }
 
@@ -193,18 +195,18 @@ int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_dev *dev,int nand_chunk,con
        int blk;
        int pg;
        int i;
-       
+
        u8 *x;
 
-       
+
        blk = nand_chunk/PAGES_PER_BLOCK;
        pg = nand_chunk%PAGES_PER_BLOCK;
-       
-       
+
+
        if(data)
        {
                x = ned.block[blk]->page[pg]->data;
-               
+
                for(i = 0; i < PAGE_DATA_SIZE; i++)
                {
                        x[i] &=data[i];
@@ -212,16 +214,16 @@ int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_dev *dev,int nand_chunk,con
 
                ned.block[blk]->page[pg]->empty = 0;
        }
-       
-       
+
+
        if(tags)
        {
                x = &ned.block[blk]->page[pg]->data[PAGE_DATA_SIZE];
-               
-               yaffs_pack_tags2((struct yaffs_packed_tags2 *)x,tags, !dev->param.no_tags_ecc);
-                       
+
+               yaffs_pack_tags2(dev, (struct yaffs_packed_tags2 *)x,tags, !dev->param.no_tags_ecc);
+
        }
-       
+
        if(tags || data)
        {
                nandemul_yield(1);
@@ -235,60 +237,35 @@ int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_dev *dev,int nand_chunk, u
 {
        int blk;
        int pg;
-       
+
        u8 *x;
 
-       
-       
+
+
        blk = nand_chunk/PAGES_PER_BLOCK;
        pg = nand_chunk%PAGES_PER_BLOCK;
-       
-       
+
+
        if(data)
        {
                memcpy(data,ned.block[blk]->page[pg]->data,PAGE_DATA_SIZE);
        }
-       
-       
+
+
        if(tags)
        {
                x = &ned.block[blk]->page[pg]->data[PAGE_DATA_SIZE];
-               
-               yaffs_unpack_tags2(tags,(struct yaffs_packed_tags2 *)x, !dev->param.no_tags_ecc);
-       }
-
-       return YAFFS_OK;
-}
-
 
-static int nandemul2k_CheckChunkErased(struct yaffs_dev *dev,int nand_chunk)
-{
-       int blk;
-       int pg;
-       int i;
-
-       
-       
-       blk = nand_chunk/PAGES_PER_BLOCK;
-       pg = nand_chunk%PAGES_PER_BLOCK;
-       
-       
-       for(i = 0; i < PAGE_TOTAL_SIZE; i++)
-       {
-               if(ned.block[blk]->page[pg]->data[i] != 0xFF)
-               {
-                       return YAFFS_FAIL;
-               }
+               yaffs_unpack_tags2(dev, tags,(struct yaffs_packed_tags2 *)x, !dev->param.no_tags_ecc);
        }
 
        return YAFFS_OK;
-
 }
 
 int nandemul2k_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber)
 {
-       
-       
+       (void) dev;
+
        if(blockNumber < 0 || blockNumber >= ned.nBlocks)
        {
                yaffs_trace(YAFFS_TRACE_ALWAYS,
@@ -305,28 +282,32 @@ int nandemul2k_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber)
        {
                nandemul_ReallyEraseBlock(blockNumber);
        }
-       
+
        return YAFFS_OK;
 }
 
 int nandemul2k_InitialiseNAND(struct yaffs_dev *dev)
 {
+       (void) dev;
+
        CheckInit();
        return YAFFS_OK;
 }
+
 int nandemul2k_MarkNANDBlockBad(struct yaffs_dev *dev, int block_no)
 {
-       
+
        u8 *x;
-       
+
+       (void) dev;
+
        x = &ned.block[block_no]->page[0]->data[PAGE_DATA_SIZE];
-       
+
        memset(x,0,sizeof(struct yaffs_packed_tags2));
-       
-       
+
+
        return YAFFS_OK;
-       
+
 }
 
 int nandemul2k_QueryNANDBlock(struct yaffs_dev *dev, int block_no, enum yaffs_block_state *state, u32  *seq_number)
@@ -335,9 +316,9 @@ int nandemul2k_QueryNANDBlock(struct yaffs_dev *dev, int block_no, enum yaffs_bl
        int chunkNo;
 
        *seq_number = 0;
-       
+
        chunkNo = block_no * dev->param.chunks_per_block;
-       
+
        nandemul2k_ReadChunkWithTagsFromNAND(dev,chunkNo,NULL,&tags);
        if(tags.block_bad)
        {