From mboxrd@z Thu Jan 1 00:00:00 1970 From: Scott Wood Date: Thu, 7 Mar 2013 16:27:47 -0600 Subject: [U-Boot] [PATCH] mtd: nand: fix the written length when nand_write_skip_bad failed In-Reply-To: (from hotforest@gmail.com on Thu Mar 7 09:02:27 2013) Message-ID: <1362695267.23227.10@snotra> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 03/07/2013 09:02:27 AM, htbegin wrote: > Hi, Scott > > On Thu, Mar 7, 2013 at 2:22 AM, Scott Wood > wrote: > > On 03/06/2013 08:56:56 AM, htbegin wrote: > >> > 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... > Sorry, I can't help. It's moot because I don't think this change should be made, but this is a case where you could enable it temporarily in your board config for some basic testing. > >> 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 > No, the returned value doesn't include the length of the error page. > In no-WITH_YAFFS_OOB case, when nand_write failed, > truncated_write_size has been > updated by nand_write to the length which has been successfully > written , so it's OK to subtract written_size from left_to_write. OK, but that doesn't explain why the change is needed. You said you wanted to find the block with the error. We only write one block at a time in the loop. Why do you need the specific page within the block that failed? -Scott