[U-Boot] [PATCH] mtd: nand: fix the written length when nand_write_skip_bad failed

Scott Wood scottwood at freescale.com
Wed Mar 6 19:22:25 CET 2013


On 03/06/2013 08:56:56 AM, htbegin wrote:
> Hi, Scott
> 
> Thanks for your review.
> 
> On Tue, Mar 5, 2013 at 9:58 AM, Scott Wood <scottwood at freescale.com>  
> wrote:
> > On 03/02/2013 03:01:10 AM, Tao Hou wrote:
> >>
> >> When the data has been partially written into the NAND Flash,
> >> returning the written length instead of 0. The written length
> >> may be useful when the upper level decides to continue the writing
> >> after skipping the block causing the write failure.
> >
> >
> > We already do that in some code paths.
> >
> >
> >> Signed-off-by: Tao Hou <hotforest at gmail.com>
> >> Cc: Scott Wood <scottwood at freescale.com>
> >> Cc: Ben Gardiner <bengardiner at nanometrics.ca>
> >> Cc: Lei Wen <leiwen at marvell.com>
> >> ---
> >>  drivers/mtd/nand/nand_util.c |   22 +++++++++++++++-------
> >>  1 file changed, 15 insertions(+), 7 deletions(-)
> >
> >
> > Could you rebase this on top of this patch:
> > http://patchwork.ozlabs.org/patch/224842/
> Do you mean a V2 patch ?

Yes.

> > BTW, are you actually using WITH_YAFFS_OOB?  I think there are some  
> other
> > things wrong with it at the moment, as mentioned here:
> > http://lists.denx.de/pipermail/u-boot/2013-March/148378.html
> No, I don't use it.

Changes to that code should be tested by someone...

> >>                 if (rval != 0) {
> >>                         printf("NAND write to offset %llx failed  
> %d\n",
> >>                                 offset, rval);
> >> -                       *length -= left_to_write;
> >> +                       *length -= left_to_write - written_size;
> >>                         return rval;
> >>                 }
> >
> >
> > ...but I don't see why this part is needed (or correct).  Why  
> doesn't
> > "*length -= left_to_write" already get you what you want?
> >
> > -Scott
> I just use "*length -= left_to_write - written_size" to tell the upper
> level that what
> had been actually happened. For the current block, "written_size" has
> been written to the NAND Flash yet, so left_to_write should be
> subtracted by "written_size".

But left_to_write isn't decreased until after this error return, so  
that's already the case.  Subtracting written_size from left_to_write  
has the effect of increasing length by written_size, so the return  
value will now look like the error page has been written.

-Scott


More information about the U-Boot mailing list