flash_eraseall reports incorrect percentage
It seems that the flash_eraseall utility doesn't report the correct percentage upon completion. After erasing the last sector, the output seems not to get updated anymore. This leads to something like this on a partition with only 2 sectors:
flash_eraseall /dev/mtd6
Erasing 256 Kibyte @ 40000 -- 50 % complete.
I'm just posting this report as a reference. Perhaps somebody has a little time to fix it.
Thanks.
Best regards,
Stefan
Quoted 10 lines · Stefan Roese
It seems that the
flash_eraseallutility doesn't report the correct percentage upon completion. After erasing the last sector, the output seems not to get updated anymore. This leads to something like this on a partition with only 2 sectors:
flash_eraseall/dev/mtd6
Erasing 256 Kibyte @ 40000 -- 50 % complete.I'm just posting this report as a reference. Perhaps somebody has a little time to fix it.
Well, I sacrificed a little time otherwise used to prepare supper, but fridge is emty...
# flash_eraseall /dev/mtd4 Erasing 128 Kibyte @ 2800000 -- 100 % complete.
flash_eraseall
* fix percentage reporting
* exit()ing from main() is overkill, just return
flash_eraseall.c +19 -16
@@ -49,6 +49,7 @@ static int quiet; /* true -- don't output progress */static int jffs2;// format for jffs2 usage static void process_options (int argc,char *argv[]); +void show_progress (mtd_info_t *meminfo,erase_info_t *erase);static void display_help (void );static void display_version (void );static struct jffs2_unknown_node cleanmarker;
@@ -63,16 +64,15 @@ int main (int argc, char *argv[])process_options (argc, argv); -if ((fd =open (mtd_device,O_RDWR )) <0 ) {fprintf (stderr,"%s: %s: %s\n" , exe_name, mtd_device,strerror (errno)); -exit (1 ); +return 1 ; }if (ioctl (fd,MEMGETINFO , &meminfo) !=0 ) {fprintf (stderr,"%s: %s: unable to get MTD device info\n" , exe_name, mtd_device); -exit (1 ); +return 1 ; } erase.length = meminfo.erasesize;
@@ -88,7 +88,7 @@ int main (int argc, char *argv[])if (ioctl (fd,MEMGETOOBSEL , &oobinfo) !=0 ) {fprintf (stderr,"%s: %s: unable to get NAND oobinfo\n" , exe_name, mtd_device); -exit (1 ); +return 1 ; }/* Check for autoplacement */
@@ -96,7 +96,7 @@ int main (int argc, char *argv[])/* Get the position of the free bytes */ if (!oobinfo.oobfree[0 ][1 ]) {fprintf (stderr," Eeep. Autoplacement selected and no empty space in oob\n" ); -exit (1 ); +return 1 ; } clmpos = oobinfo.oobfree[0 ][0 ]; clmlen = oobinfo.oobfree[0 ][1 ];
@@ -137,23 +137,17 @@ int main (int argc, char *argv[]) bbtest =0 ;if (isNAND) {fprintf (stderr,"%s: %s: Bad block check not available\n" , exe_name, mtd_device); -exit (1 ); +return 1 ; } }else {fprintf (stderr,"\n%s: %s: MTD get bad block failed: %s\n" , exe_name, mtd_device,strerror (errno)); -exit (1 ); +return 1 ; } } } -if (!quiet) { -printf - ("\rErasing %d Kibyte @ %x -- %2llu %% complete." , - meminfo.erasesize /1024 , erase.start, - (unsigned long long ) - erase.start *100 / meminfo.size); - } -fflush (stdout); +if (!quiet) +show_progress (&meminfo, &erase);if (ioctl (fd,MEMERASE , &erase) !=0 ) {fprintf (stderr,"\n%s: %s: MTD Erase failure: %s\n" , exe_name, mtd_device,strerror (errno));
@@ -187,8 +181,10 @@ int main (int argc, char *argv[])if (!quiet)printf (" Cleanmarker written at %x." , erase.start); } -if (!quiet) +if (!quiet) { +show_progress (&meminfo, &erase);printf ("\n" ); + }return 0 ; }
@@ -254,6 +250,13 @@ void process_options (int argc, char *argv[]) mtd_device = argv[optind]; } +void show_progress (mtd_info_t *meminfo,erase_info_t *erase) +{ +printf ("\rErasing %d Kibyte @ %x -- %2llu %% complete." , + meminfo->erasesize /1024 , erase->start, + (unsigned long long ) erase->start *100 / meminfo->size); +fflush (stdout); +}void display_help (void ) {
Quoted 15 lines · Ladislav Michl
Quoted 10 lines · Stefan Roese
It seems that the
flash_eraseallutility doesn't report the correct percentage upon completion. After erasing the last sector, the output seems not to get updated anymore. This leads to something like this on a partition with only 2 sectors:
flash_eraseall/dev/mtd6
Erasing 256 Kibyte @ 40000 -- 50 % complete.I'm just posting this report as a reference. Perhaps somebody has a little time to fix it.
Well, I sacrificed a little time otherwise used to prepare supper, but fridge is emty...
Quoted 8 lines
# flash_eraseall /dev/mtd4 Erasing 128 Kibyte @ 2800000 -- 100 % complete.
flash_eraseall
* fix percentage reporting
* exit()ing frommain()is overkill, just returnSigned-off-by Ladislav Michl <[email protected]>
It seems others are busy, so I took a look at this. I think the patch is OK, pushed to mtd-utils.git.
Thanks.
Signature · 2 lines
Best regards, Artem Bityutskiy (Битюцкий Артём)
Quoted 23 lines · On Fri, 21 Nov 2008 11:51:38 +0200 Artem Bityutskiy <[email protected]>…
Quoted 22 lines · Ladislav Michl
Quoted 10 lines · Stefan Roese
It seems that the
flash_eraseallutility doesn't report the correct percentage upon completion. After erasing the last sector, the output seems not to get updated anymore. This leads to something like this on a partition with only 2 sectors:
flash_eraseall/dev/mtd6
Erasing 256 Kibyte @ 40000 -- 50 % complete.I'm just posting this report as a reference. Perhaps somebody has a little time to fix it.
Well, I sacrificed a little time otherwise used to prepare supper, but fridge is emty...
# flash_eraseall /dev/mtd4 Erasing 128 Kibyte @ 2800000 -- 100 % complete.
flash_eraseall
* fix percentage reporting
* exit()ing frommain()is overkill, just return
Quoted 5 lines
Quoted 1 line
Signed-off-by Ladislav Michl <[email protected]>It seems others are busy, so I took a look at this. I think the patch is OK, pushed to mtd-utils.git.
Thanks. I was planning to do that this afternoon, but now I can stare at some other patch instead :).
josh