RomFS MTD and NAND Flash with ECC (EUCLEAN).

Artem Bityutskiy dedekind1 at gmail.com
Tue Sep 20 03:41:20 EDT 2011


On Mon, 2011-09-19 at 16:19 -0400, Bill Pringlemeir wrote:
> On 19 Sep 2011, dedekind1 at gmail.com wrote:
> 
> On Fri, 2011-09-16 at 16:46 -0400, Bill Pringlemeir wrote:
> >>  #ifdef CONFIG_ROMFS_ON_MTD
> >> -#define ROMFS_MTD_READ(sb, ...) ((sb)->s_mtd->read((sb)->s_mtd, ##__VA_ARGS__))
> >> -
> >> +#define ROMFS_MTD_READ(sb, ...)                                        \
> >> +    ({ int res;                                                        \
> >> +        res = ((sb)->s_mtd->read((sb)->s_mtd, ##__VA_ARGS__)) == -EUCLEAN ? \
> >> +            0 : res; })                                                         
> 
> > I do not think this is the most elegant way to handle this, but yes,
> > EUCLEAN is used nowadays to report about bit-flips, which are actually
> > not an error, more like an info that this eraseblock needs some
> > attention.
> 
> Good.  Neither do I.  Sometimes code is better at describing a problem.
> 
> > I am not sure MTD is the right subsystem for this patch, could you try
> > to send it to fs-devel / Al Viro instead?
> 
> I kind of thought it was not a good patch. 

|I did not mean this patch is bad, on the opposite - it looks to be of
"similar style" as ROMFS. I just meant that this patch is for a
file-system, so most probably should go in via Al Viro. Feel free to put
me to CC when re-sending.

>  I will try to rework it.
> Now, I am sure of 'EUCLEAN's meaning.  I also observe that my romfs
> works fine with a NAND flash if the BLOCK device is used.
> 
> Currently the romfs code is making a decision based on...
> 
>    int romfs_dev_read(struct super_block *sb, unsigned long pos,
>    ...
>        if (sb->s_mtd)
>           return romfs_mtd_read(sb, pos, buf, buflen);
> 
> The NAND flash will not map directly to a CPU memory space like a NOR
> flash.  I *think* the main benefit of this MTD is for the non-MMU in
> directly mapping files?  What is the benefit of using the MTD versus the
> block device for NAND flash?  [I think that is not a fs-devel
> question...].

For R/O FS there is probably not much benefits, except of less layers ->
a bit faster.

> Also, it is not the place of RomFs to be writing flash.  However, if
> there is an EUCLEAN return code, is it worth a printk?

On the one hand, bit-flips happen very often in modern flashes, so if
you print a message on every bit-flip, you may have a lot of messages.

On the other hand, if you use RomFS on a modern flash, you are probably
doing wrong thing because it is unable to handle bit-flips. You should
rather use it on top of UBI. So printing messages is good, because it
would make the user to start thinking about an issue.

So I'd say, overall I think printing a warning is a good idea.


-- 
Best Regards,
Artem Bityutskiy




More information about the linux-mtd mailing list