[OpenWrt-Devel] mtd: skip bad blocks when writing

Message ID 20180518152530.2642-1-leventelist@gmail.com
State New
Headers show
Series
  • [OpenWrt-Devel] mtd: skip bad blocks when writing
Related show

Commit Message

Lev May 18, 2018, 3:25 p.m.
---
 package/system/mtd/src/jffs2.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

Patch

diff --git a/package/system/mtd/src/jffs2.c b/package/system/mtd/src/jffs2.c
index b432f64ac0..5bf3eec328 100644
--- a/package/system/mtd/src/jffs2.c
+++ b/package/system/mtd/src/jffs2.c
@@ -308,6 +308,16 @@  int mtd_write_jffs2(const char *mtd, const char *filename, const char *dir)
 	for(;;) {
 		struct jffs2_unknown_node *node = (struct jffs2_unknown_node *) buf;
 
+		while (mtd_block_is_bad(outfd, mtdofs) && (mtdofs < mtdsize)) {
+			if (!quiet)
+				fprintf(stderr, "\nSkipping bad block at 0x%08x   ", mtdofs);
+
+			mtdofs += erasesize;
+
+			/* Move the file pointer along over the bad block. */
+			lseek(outfd, erasesize, SEEK_CUR);
+		}
+
 		if (read(outfd, buf, erasesize) != erasesize) {
 			fdeof = 1;
 			break;