Incomplete nodes written to flash
Josh Boyer
jdub at us.ibm.com
Tue Aug 31 07:58:48 EDT 2004
On Tue, 2004-08-31 at 06:22, Felix Domke wrote:
> I have a 32MB NAND flash using linux-2.6.8-rc4 with a 2MB jffs2
> partition (along with a bigger jffs2 partition).
>
> What I experience is corrupted nodes when not unmounting a jffs2
> partition properly. It seems that the last node written to flash is
> incompetely written (the last, not completely filled sector isn't written).
>
> Unmounting writes this last sector, with correct padding. Now, is that
> the supposed behaviour?
>
> I have, for example, a 2MB boot jffs2 partition. It only contains one
> file in mostly 4k chunks. At some boundaries, there are like ~0x98 bytes
> unused space, which is just filled with FF until the next sector. I know
> that these can't be avoided, as a chunk can never wrap around a block,
> and the remaining space is not enough to generate a new chunk.
>
> When i now create any file on that partition, the new directory node and
> the new file node will be written, but then a garbage collection will
> start, collecting a block with these 0x98 bytes free space. Why does it
> make a GC here? Does it try to reorganize the blocks to make the 0x98
> bytes usable?
Not sure.
>
> But in any case, the last sector of the last garbage collected block
> (i.e. the last sector "written") isn't physically written to the device,
> only when i unmount the filesystem. Is that supposed? I know that NAND
> has these "10 writes then you must erase" restriction, so i guess the
> last write is delayed since you can't reuse the last part of the sector
> otherwise without counting these 10 times. But in my eyes, it would be
> better to waste the remaining sector (<512 bytes) but keep data
> integrity in these cases, because otherwise you will always(!) loose
> data when turing off the device.
Have you actually lost data? I have seen the case where GC nodes don't
get flushed to the medium on my board, but I haven't lost data.
>
> I know that jffs2 should ignore all nodes with wrong data crc, but i
> don't want to rely on that.
>
> Or is there any timer which completes these writes after a certain
> timeout which just doesn't work for me?
pdflushd will write out non-GC nodes. GC nodes aren't flushed because
of wasted space with padding I suppose.
josh
More information about the linux-mtd
mailing list