Mika Liljeberg
2002-Sep-22 07:28 UTC
Assertion failure in ext3_get_block() at inode.c:853: "handle != 0"
Hi, Got the following on Linux 2.5.37 trying to run apt-get update. MikaL Sep 21 23:10:05 devil kernel: Assertion failure in ext3_get_block() at inode.c:853: "handle != 0" Sep 21 23:10:05 devil kernel: kernel BUG at inode.c:853! Sep 21 23:10:05 devil kernel: invalid operand: 0000 Sep 21 23:10:05 devil kernel: CPU: 1 Sep 21 23:10:05 devil kernel: EIP: 0060:[ext3_get_block+61/104] Not tainted Sep 21 23:10:05 devil kernel: EFLAGS: 00010282 Sep 21 23:10:05 devil kernel: eax: 00000047 ebx: 00000000 ecx: c9f65d60 edx: c0368800 Sep 21 23:10:05 devil kernel: esi: 00000001 edi: 00000000 ebp: c95c4e84 esp: c9f65df0 Sep 21 23:10:05 devil kernel: ds: 0068 es: 0068 ss: 0068 Sep 21 23:10:05 devil kernel: Process apt-get (pid: 1694, threadinfo=c9f64000 task=d215c7a0) Sep 21 23:10:05 devil kernel: Stack: c02f2620 c02f268c c02f247a 00000355 c02f2680 c1275e98 00000000 c016598a Sep 21 23:10:05 devil kernel: c95c4e84 00000000 c9f65e90 00000001 c95c4f0c c9f65f70 00000000 00000004 Sep 21 23:10:05 devil kernel: c95c4f0c c9f65e58 fffffffc c9f65ee0 c95c4f3c c95c4f2c c95c4f1c c9f64000 Sep 21 23:10:05 devil kernel: Call Trace: [mpage_writepages+990/1971] [filemap_nopage+243/612] [do_no_page+617/784] [handle_mm_fault+149/360] [__set_page_dirty_buffers+344/404] Sep 21 23:10:05 devil kernel: [filemap_sync_pte+106/116] [ext3_writepages+31/48] [ext3_get_block+0/104] [do_writepages+24/44] [filemap_fdatawrite+93/112] [msync_interval+102/196] Sep 21 23:10:05 devil kernel: [sys_msync+169/250] [syscall_call+7/11] Sep 21 23:10:05 devil kernel: Sep 21 23:10:05 devil kernel: Code: 0f 0b 55 03 7a 24 2f c0 83 c4 14 6a 01 56 8b 44 24 1c 50 8b
Andrew Morton
2002-Sep-22 18:32 UTC
Re: Assertion failure in ext3_get_block() at inode.c:853: "handle != 0"
Mika Liljeberg wrote:> > Hi, > > Got the following on Linux 2.5.37 trying to run apt-get update. > > MikaL > > Sep 21 23:10:05 devil kernel: Assertion failure in ext3_get_block() at inode.c:853: "handle != 0"Oh crap. You're using data=writeback, yes? I changed writeout in data=writeback mode to use the fast direct-to-BIO-with-no-buffer_heads code. But I forgot about MAP_SHARED pages which don't have a disk mapping yet. Ho hum. Will fix. Thanks.
Andrew Morton
2002-Sep-22 18:52 UTC
Re: Assertion failure in ext3_get_block() at inode.c:853: "handle != 0"
It occurs to me that now we have the "writepages" operation we might be able to hold a single transaction open across writeback of many pages, only closing the transaction handle when it runs out of credits, in the same manner as the ext3 direct IO code. It'll require that mpage_writepage do a trylock on the page, but I was resigned to having to do that at some point anyway... Nah, scrub that idea. It'll only help MAP_SHARED writeout and nobody does that enough to bother. Let's disable it all for a while while I think about it. fs/ext3/inode.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) --- 2.5.38/fs/ext3/inode.c~unbreak-writeback-mode Sun Sep 22 11:42:00 2002 +++ 2.5.38-akpm/fs/ext3/inode.c Sun Sep 22 11:42:21 2002 @@ -1474,17 +1474,18 @@ struct address_space_operations ext3_aop /* For writeback mode, we can use mpage_writepages() */ +#if 0 /* Doesn't work for shared mappings */ static int ext3_writepages(struct address_space *mapping, struct writeback_control *wbc) { return mpage_writepages(mapping, wbc, ext3_get_block); } +#endif struct address_space_operations ext3_writeback_aops = { .readpage = ext3_readpage, /* BKL not held. Don't need */ .readpages = ext3_readpages, /* BKL not held. Don't need */ .writepage = ext3_writepage, /* BKL not held. We take it */ - .writepages = ext3_writepages, /* BKL not held. Don't need */ .sync_page = block_sync_page, .prepare_write = ext3_prepare_write, /* BKL not held. We take it */ .commit_write = ext3_commit_write, /* BKL not held. We take it */