JFFS2: BUG: sleeping function called from invalid context
dwmw2 at infradead.org
Fri Mar 23 10:48:57 EDT 2007
On Fri, 2007-03-23 at 16:15 +0200, Adrian Hunter wrote:
> [nandsim] warning: simulating write failure in page 444
> jffs2_flush_wbuf(): Write failed with -5
> In jffs2_wbuf_recover
> Skipping node at 0x00036000(3)-0x00036950 which is either before 0x00037800 or obsolete
> First node to be recovered is at 0x00036950(2)-0x00037994
> wbuf recover 00036950-00037994 (4164 bytes in 1 nodes)
> Write 0x1000 bytes at 0x00554000 in wbuf recover
> Recovery of wbuf succeeded to 00554000
> Refiling block of 00001044 at 00036950(2) to 00554000
> calling jffs2_gc_fetch_inode
> wbuf recovery completed OK. wbuf_ofs 0x00555000, len 0x44
> Write of 1548 bytes at 0x00037994 failed. returned -5, retlen 0
> Not marking the space at 0x00037994 as dirty because the flash driver returned retlen zero
> JFFS2 warning: (3229) jffs2_sum_write_sumnode: Empty summary info!!!
> ------------[ cut here ]------------
> kernel BUG at fs/jffs2/summary.c:824!
Hm. What block was it trying to retire? Surely not the "bad" block at
0x36000 (page 444) but the block it recovered _to_, at 0x554000?
Can you show that again with a full CONFIG_JFFS2_FS_DEBUG=1 log for the
period in question?
Instrumenting the code to dump the raw node list for the eraseblock in
question before triggering the BUG() would also be useful.
More information about the linux-mtd