Handle possible race: do not proceed uf_readpages_filler if page is already uptodate. Print debugging info. Signed-off-by: Edward Shishkin --- linux-2.6.20-mm2/fs/reiser4/plugin/file/file.c | 4 +++ linux-2.6.20-mm2/fs/reiser4/plugin/item/extent_file_ops.c | 17 ++++++++++++++ 2 files changed, 21 insertions(+) --- linux-2.6.20-mm2/fs/reiser4/plugin/file/file.c.orig +++ linux-2.6.20-mm2/fs/reiser4/plugin/file/file.c @@ -1619,6 +1619,10 @@ lock_page(page); cbk_done = 1; } + if (PageUptodate(page)) { + unlock_page(page); + return 0; + } ret = zload(rc->coord.node); if (ret) { unlock_page(page); --- linux-2.6.20-mm2/fs/reiser4/plugin/item/extent_file_ops.c.orig +++ linux-2.6.20-mm2/fs/reiser4/plugin/item/extent_file_ops.c @@ -1157,7 +1157,24 @@ case UNALLOCATED_EXTENT: j = jfind(mapping, index); + if (j == NULL) { + dump_stack(); + printk("edward-2000: oid = %llu\n", + (unsigned long long)oid); + printk("edward-2001: Jnode not found\n"); + } assert("nikita-2688", j); + if (jnode_page(j) != NULL) { + dump_stack(); + printk("edward-2002: oid = %llu\n", + (unsigned long long)oid); + printk("edward-2003: read page %p of idx %lu\n", + page, page->index); + printk("edward-2004: jnode page %p of idx %lu\n", + jnode_page(j), jnode_page(j)->index); + printk("edward-2005: jnode blknr = %llu\n", + (unsigned long long)(*jnode_get_block(j))); + } assert("vs-1426", jnode_page(j) == NULL); spin_lock_jnode(j);