jffs_file_write and DOC

Finn Hakansson finn.hakansson at axis.com
Wed Jul 19 10:03:30 EDT 2000


On Wed, 19 Jul 2000, Rogelio M. Serrano Jr. wrote:

> I observed that the jffs_file_write function misbehaves when given a
> chunk bigger than MAX_CHUNK_SIZE. It is passed a chunk exactly equal to
> MAX_CHUNK_SIZE so when it adds the inode and the name the resulting
> chunk in is more or less 60 bytes bigger than MAX_CHUNK_SIZE which is
> 4096 bytes in my case with the DOC2000.

This is a problem that I gave some thought yesterday.

Yes, I guess you're right. The total size of a chunk of data on the
flash should be 32768 bytes (2^15 bytes). In a data chunk we always
have a raw inode, possibly a name and possibly some data. The size of
the raw inode is always 60 bytes. The maximum size of a name field is
256 bytes. This gives us a total size of between (32768 - 60 - 256)
and (32768 - 60) bytes of data possible to add in each data chunk.


> Cat just writes a file shorter than it should be on flash. I used a
> modified DOC_loadbios utility to download my JFFS images to the DOC. If
> I dont write anything to it I could mount and unmount cleanly. But when
> I write to it, I get bad checksums on the next mount and totoal mount
> failure after couple more mounts.

Could you explain this in more detail, please?


> How is jffs_write_file called when we write a large file to flash? I
> dont see any loops in jffs_file_write. Does the VFS layer handle the
> subdivisions and calls jffs_file_write with chunks equal to max chunk
> size? How do we handle this ?

Right now the jffs_file_write function does not loop as it should if
it is writing something larger than MAX_CHUNK_SIZE. This should be
fixed soon I hope. It is not a difficult thing to fix I guess.

Thanks!

/Finn



To unsubscribe, send "unsubscribe mtd" to majordomo at infradead.org



More information about the linux-mtd mailing list