diff options
| author | Rafał Miłecki <rafal@milecki.pl> | 2022-03-25 13:00:25 +0100 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2022-03-28 08:49:40 +0200 | 
| commit | e62ea740c5e4edb37065193c400a3a82d5479c15 (patch) | |
| tree | 3f1ddec3f2dfb5b9eb53e1668bfac05063c2de86 /nand-utils | |
| parent | 0a3d242564646908b63fe7602e9b986edbbb555d (diff) | |
nandwrite: warn about writing 0xff blocks
Such blocks may be incorrectly treated as empty (even though they may
have non-erase OOB). Warn about it so people may start useing
--skip-all-ffs .
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'nand-utils')
| -rw-r--r-- | nand-utils/nandwrite.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/nand-utils/nandwrite.c b/nand-utils/nandwrite.c index e8a210c..cd53a17 100644 --- a/nand-utils/nandwrite.c +++ b/nand-utils/nandwrite.c @@ -280,6 +280,7 @@ int main(int argc, char * const argv[])  	libmtd_t mtd_desc;  	int ebsize_aligned;  	uint8_t write_mode; +	size_t all_ffs_cnt = 0;  	process_options(argc, argv); @@ -417,6 +418,8 @@ int main(int argc, char * const argv[])  	 */  	while ((imglen > 0 || writebuf < filebuf + filebuf_len)  		&& mtdoffset < mtd.size) { +		bool allffs; +  		/*  		 * New eraseblock, check for bad block(s)  		 * Stay in the loop to be sure that, if mtdoffset changes because @@ -555,7 +558,8 @@ int main(int argc, char * const argv[])  		}  		ret = 0; -		if (!skipallffs || !buffer_check_pattern(writebuf, mtd.min_io_size, 0xff)) { +		allffs = buffer_check_pattern(writebuf, mtd.min_io_size, 0xff); +		if (!allffs || !skipallffs) {  			/* Write out data */  			ret = mtd_write(mtd_desc, &mtd, fd, mtdoffset / mtd.eb_size,  					mtdoffset % mtd.eb_size, @@ -564,6 +568,8 @@ int main(int argc, char * const argv[])  					writeoob ? oobbuf : NULL,  					writeoob ? mtd.oob_size : 0,  					write_mode); +			if (!ret && allffs) +				all_ffs_cnt++;  		}  		if (ret) { @@ -615,6 +621,11 @@ closeall:  		   || (writebuf < filebuf + filebuf_len))  		sys_errmsg_die("Data was only partially written due to error"); +	if (all_ffs_cnt) { +		fprintf(stderr, "Written %zu blocks containing only 0xff bytes\n", all_ffs_cnt); +		fprintf(stderr, "Those block may be incorrectly treated as empty!\n"); +	} +  	/* Return happy */  	return EXIT_SUCCESS;  }  | 
