Fix computation in nand_util.c:get_len_incl_bad
authorDaniel Hobi <daniel.hobi@schmid-telecom.ch>
Tue, 1 Dec 2009 13:05:55 +0000 (14:05 +0100)
committerWolfgang Denk <wd@denx.de>
Mon, 7 Dec 2009 21:38:16 +0000 (22:38 +0100)
Depending on offset, flash size and the number of bad blocks,
get_len_incl_bad may return a too small value which may lead to:

1) If there are no bad blocks, nand_{read,write}_skip_bad chooses the
bad block aware read/write code. This may hurt performance, but does
not have any adverse effects.

2) If there are bad blocks, the nand_{read,write}_skip_bad may choose
the bad block unaware read/write code (if len_incl_bad == *length)
which leads to corrupted data.

Signed-off-by: Daniel Hobi <daniel.hobi@schmid-telecom.ch>
drivers/mtd/nand/nand_util.c

index bec927706f976cf3cf4a781badb505d721dfb922..7085d42cc1b92ebc7e4a543863c85867bd7cf245 100644 (file)
@@ -452,7 +452,7 @@ static size_t get_len_incl_bad (nand_info_t *nand, loff_t offset,
                len_incl_bad += block_len;
                offset       += block_len;
 
-               if ((offset + len_incl_bad) >= nand->size)
+               if (offset >= nand->size)
                        break;
        }