nandwrite: always check the first erase block
Current code does not check the first erase block when mtdoffset is not erase block aligned. Fix this. Signed-off-by: Baruch Siach <baruch@tkos.co.il> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b32a543663
commit
7715b48c36
@ -52,7 +52,7 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
|
||||
unsigned opts;
|
||||
int fd;
|
||||
ssize_t cnt;
|
||||
unsigned mtdoffset, meminfo_writesize;
|
||||
unsigned mtdoffset, meminfo_writesize, blockstart;
|
||||
struct mtd_info_user meminfo;
|
||||
unsigned char *filebuf;
|
||||
const char *opt_s = "0";
|
||||
@ -83,9 +83,21 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
|
||||
|
||||
filebuf = xmalloc(meminfo_writesize);
|
||||
|
||||
blockstart = mtdoffset & ~(meminfo.erasesize - 1);
|
||||
if (blockstart != mtdoffset) {
|
||||
unsigned tmp;
|
||||
/* mtdoffset is in the middle of an erase block, verify that
|
||||
* this block is OK. Advance mtdoffset only if this block is
|
||||
* bad.
|
||||
*/
|
||||
tmp = next_good_eraseblock(fd, &meminfo, blockstart);
|
||||
if (tmp != blockstart) /* bad block(s), advance mtdoffset */
|
||||
mtdoffset = tmp;
|
||||
}
|
||||
|
||||
cnt = -1;
|
||||
while (mtdoffset < meminfo.size) {
|
||||
unsigned blockstart = mtdoffset & ~(meminfo.erasesize - 1);
|
||||
blockstart = mtdoffset & ~(meminfo.erasesize - 1);
|
||||
if (blockstart == mtdoffset) {
|
||||
/* starting a new eraseblock */
|
||||
mtdoffset = next_good_eraseblock(fd, &meminfo, blockstart);
|
||||
|
Loading…
Reference in New Issue
Block a user