JFFS2 Corruption.

David Woodhouse dwmw2 at infradead.org
Tue Feb 24 07:00:10 EST 2004

On Tue, 2004-02-24 at 09:48 +0000, simon at baydel.com wrote:
> Comitted the sin of posting a reply with the reply text first, sorry.

And this time you committed the sin of including _far_ more of the
previous mail(s) than was necessary. But I'm not feeling cruel today so
I'll not continue to ignore you :)

> I have only managed to get this to fail if the jffs2 filesystem is mounted as root. I do 
> not seem to be able to get it to close and unmount the filesystem at shutdown. I 
> guess the BLKFLSBUF I do only flushes the buffer that is created when I open the 
> device and not the one that was created when the kernel opened the device. 

JFFS2 doesn't actually _use_ the mtdblock device. If you look closely at
the code, you'll see we never read or write to/from it, we just use the
minor number as an argument to get_mtd_device(). 

In fact, it's perfectly possible to use any _other_ device driver
instead of the mtdblock device, as long as it has the major number which
JFFS2 is looking for. 

I wonder if the rootfs-mounting is opening the _actual_ block device and
doing some I/O, and that's later getting flushed, causing corruption.
Although I can't comprehend why a failed attempt to mount, for example,
ext2 would cause the mtdblock device to consider its buffer _dirty_ and
try to write it back on close.

What happens if you use the 'mtdblock_ro' device instead? That shares
the major number, but doesn't share the caching.


More information about the linux-mtd mailing list