[RFC] nand_btt : use nand chip->block_bad
Shmulik Ladkani
shmulik.ladkani at gmail.com
Thu Jun 28 14:31:46 EDT 2012
Hi Matthieu,
On Thu, 28 Jun 2012 17:47:22 +0200 Matthieu CASTET <matthieu.castet at parrot.com> wrote:
> for (i = startblock; i < numblocks;) {
> int ret;
>
> BUG_ON(bd->options & NAND_BBT_NO_OOB);
>
> - if (bd->options & NAND_BBT_SCANALLPAGES)
> - ret = scan_block_full(mtd, bd, from, buf, readlen,
> - scanlen, len);
> - else
> - ret = scan_block_fast(mtd, bd, from, buf, len);
> -
> + ret = this->block_bad(mtd, from, 1);
> if (ret < 0)
> return ret;
>
Hmm, seems elegant, nand_bbt is not supposed to be elegant, what are we
missing here? ;-))
- I think nand_chip ops are not supposed to be called directly from
outside nand driver (nand_base et al); instead the mtd interfaces
should be used.
OTOH, one might consider nand_bbt to be part of nand_base driver...
- The new scheme lacks the potential error correction offered by the
mtd_read_oob call (invoked from the original scan functions).
OTOH, currently, AFAIK, it is only offered by an out-of-tree driver.
- The original scheme allows validating against an arbitrary
nand_bbt_descr, whereas 'block_bad' reads the 'badblockpos' byte.
Don't know if this is a real issue (need to look at the descriptors
used); and probably, 'block_bad' can be augmented to use a given
descriptor.
- To preserve all functionality, we need to augment 'block_bad'
implementors to support NAND_BBT_SCANALLPAGES (e.g. nand_block_bad
lacks this).
And maybe there are some more nand_bbt secrets...
Regards,
Shmulik
More information about the linux-mtd
mailing list