data loss on jffs2 filesystem on dataflash

Peter Menzebach pm-mtd at mw-itcon.de
Thu Sep 15 05:14:58 EDT 2005


Artem B. Bityuckiy wrote:
> Peter Menzebach wrote:
> 
>> -    if (!jffs2_can_mark_obsolete(c) && c->nextblock && 
>> (c->nextblock->free_size & (c->wbuf_pagesize-1))) {
>> +    if (!jffs2_can_mark_obsolete(c) && c->nextblock && 
>> (c->nextblock->free_size % c->wbuf_pagesize)) {
> 
> [snip]
> 
>> -        uint32_t skip = c->nextblock->free_size & (c->wbuf_pagesize-1);
>> +        uint32_t skip = c->nextblock->free_size % c->wbuf_pagesize;
> 
> [snip]
> 
>> -#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
>>  #define PAGE_DIV(x) ( ((unsigned long)(x) / (unsigned 
>> long)(c->wbuf_pagesize)) * (unsigned long)(c->wbuf_pagesize) )
>>  #define PAGE_MOD(x) ( (unsigned long)(x) % (unsigned 
>> long)(c->wbuf_pagesize) )
>> -#else
>> -#define PAGE_DIV(x) ( (x) & (~(c->wbuf_pagesize - 1)) )
>> -#define PAGE_MOD(x) ( (x) & (c->wbuf_pagesize - 1) )
>> -#endif
> 
> Looks sane.
> 
Ok, one step forward. With these patches I can now copy a generated 
rootfs to flash, mount it, and read it without problems.

But with writing to an empty flash, there are still these problems. I 
can confirm, that the mtd interface works properly when reading, 
writing, erasing flash. For testing, I have replaced only the jffs2 with 
an old version, leaving the mtd part the same. There everything works fine.

My guess at the moment is, that the write buffering has some problems 
somewhere. I can see, that everytime a whole pagesize is written to 
flash. Is that intended?

Any ideas?

Best regards
Peter

-- 
Peter Menzebach
Menzebach und Wolff IT-Consulting GbR
Phone +49 751 355 387 1




More information about the linux-mtd mailing list