[PATCH] nanddump: dump rigth length when jumping bad blocks

Richard Genoud richard.genoud at gmail.com
Wed Jun 18 14:59:49 UTC 2014


2014-06-18 16:08 GMT+02:00 Baruch Siach <baruch at tkos.co.il>:
> Hi Richard,
>
> On Wed, Jun 18, 2014 at 03:44:30PM +0200, Richard Genoud wrote:
>> With the "skip bad block" option, nanddump is not dumping the right
>> length if there's bad blocks.
>>
>> This patch moves the end read address each time a bad block is
>> encountered.
>
> This changes nanddump behaviour from upstream historical --omitbad (-b;
> removed in upstream d8b8f780ec3c), to existing skipbad, for which upstream
> uses the --bb=skipbad command line parameter. To avoid confusion, we should
> adapt to upstream command line parameter names, IMO.
>

yeah, you are right, I verified with upstream nanddump, and it doesn't
update the length on bad block.
so, please ignore this patch.

Thanks,
richard.

> Thanks,
> baruch
>
>> Signed-off-by: Richard Genoud <richard.genoud at gmail.com>
>> ---
>>  miscutils/nandwrite.c | 17 ++++++++++++++---
>>  1 file changed, 14 insertions(+), 3 deletions(-)
>>
>> diff --git a/miscutils/nandwrite.c b/miscutils/nandwrite.c
>> index 8c4da802f6b3..a3593adedc82 100644
>> --- a/miscutils/nandwrite.c
>> +++ b/miscutils/nandwrite.c
>> @@ -166,6 +166,10 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
>>                               int bad_len = MIN(tmp, end_addr) - mtdoffset;
>>                               dump_bad(&meminfo, bad_len, opts & OPT_o);
>>                       }
>> +                     /* with option skip bad block, increase the length */
>> +                     if (IS_NANDDUMP && (opts & OPT_b)) {
>> +                             end_addr += (tmp - blockstart);
>> +                     }
>>                       mtdoffset = tmp;
>>               }
>>       }
>> @@ -182,9 +186,16 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv)
>>                       mtdoffset = next_good_eraseblock(fd, &meminfo, blockstart);
>>                       if (IS_NANDWRITE)
>>                               printf("Writing at 0x%08x\n", mtdoffset);
>> -                     else if (mtdoffset > blockstart && !(opts & OPT_b)) {
>> -                             int bad_len = MIN(mtdoffset, limit) - blockstart;
>> -                             dump_bad(&meminfo, bad_len, opts & OPT_o);
>> +                     else if (mtdoffset > blockstart) {
>> +                             if (opts & OPT_b) {
>> +                                     /* omit bad block, but increase the length */
>> +                                     end_addr += (mtdoffset - blockstart);
>> +                                     limit = MIN(meminfo.size, end_addr);
>> +                             } else {
>> +                                     /* dump bad block if asked */
>> +                                     int bad_len = MIN(mtdoffset, limit) - blockstart;
>> +                                     dump_bad(&meminfo, bad_len, opts & OPT_o);
>> +                             }
>>                       }
>>                       if (mtdoffset >= limit)
>>                               break;
>
> --
>      http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
> =}------------------------------------------------ooO--U--Ooo------------{=
>    - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -


More information about the busybox mailing list