[Yaffs] "inbandTags" bug on yaffs_mtdif2.c

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Lin KJ
Date:  
To: yaffs
Subject: [Yaffs] "inbandTags" bug on yaffs_mtdif2.c
Hi All,

I used the YAFSS2 with "inband-tags" mode and found some error.
It is due to the wrong NAND access address calculation.
The NAND access address calculation in the code is:

loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;

It is correct on normal "OOB-tags" mode but uncorrect on "inband-tags".
In the "inband-tags" mode, the chunk size is "totalBytesPerChunk" instead of "nDataBytesPerChunk"
and the address should be calculated by

loff_t addr = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk;

After patch it as attached, the YAFSS2 runs in "inband-tags" mode well.
Besides yaffs_mtdif2.c, maybe other files also need to check.

Best Regards,
KJ

--- src/yaffs2/yaffs_mtdif2.c   2008-07-23 11:35:12.000000000 +0800
+++ yaffs2/yaffs_mtdif2.c       2008-10-08 01:10:24.000000000 +0800
@@ -107,7 +107,7 @@
        int retval = 0;
        int localData = 0;
-       loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
+       loff_t addr = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk
        yaffs_PackedTags2 pt;
@@ -194,7 +194,7 @@
        retval =
            mtd->block_markbad(mtd,
                               blockNo * dev->nChunksPerBlock *
-                              dev->nDataBytesPerChunk);
+                              dev->totalBytesPerChunk);
        if (retval == 0)
                return YAFFS_OK;
@@ -214,7 +214,7 @@
        retval =
            mtd->block_isbad(mtd,
                             blockNo * dev->nChunksPerBlock *
-                            dev->nDataBytesPerChunk);
+                            dev->totalBytesPerChunk);


      ______________________________________________________________________________________________________
付費才容量無上限?Yahoo!奇摩電子信箱2.0免費給你,信件永遠不必刪! http://tw.mg0.mail.yahoo.com/dc/landing