> On Tue, 19 Dec 2006 18:22:03 -0800 > Suzuki <[EMAIL PROTECTED]> wrote: > > > > > Andrew Morton wrote: > > > On Tue, 19 Dec 2006 17:58:12 -0800 > > > Suzuki <[EMAIL PROTECTED]> wrote: > > > > > > > > >>* Fix the kmalloc flags used from within ext3, when we have an active > > >>journal handle > > >> > > >> If we do a kmalloc with GFP_KERNEL on system running low on memory, > > >> with an active journal handle, we might end up in cleaning up the fs > > >> cache flushing dirty inodes for some other filesystem. This would cause > > >> hitting a J_ASSERT() in : > > > > > > > > > The change might be needed (haven't looked at it yet). But I'd like to > > > see > > > the full BUG trace, please. To see the callchain. > > > > Here is the call trace which was hit by one of our test teams. This was > > from fs/ext3/xattr.c. While looking for similar calls I found the others > > described in the patch. > > > > Assertion failure in journal_start() at fs/jbd/transaction.c:274: "handle- > > >h_transaction->t_journal == journal" > > kernel BUG at fs/jbd/transaction.c:274! > > illegal operation: 0001 [#1] > > CPU: 0 Not tainted (2.6.5-7.282-s390x SLES9_SP3_BRANCH-20061031152356) > > Process dbench (pid: 14070, task: 00000000025617f0, ksp: 0000000001057630) > > Krnl PSW : 0700000180000000 0000000008837b38 (journal_start+0x90/0x15c > > [jbd]) > > Krnl GPRS: 0000000000000000 0000000000507fc0 000000000000002b > > 0000000001056d80 > > 0000000008837b36 0000000000002885 0000000008841da6 > > 0000000000000000 > > 00000000001bfaa0 0000000003483d08 0000000000000002 > > 0000000007a8bda0 > > 0000000008833000 00000000088a7d08 0000000008837b36 > > 0000000001056e80 > > Krnl Code: 00 00 58 10 b0 0c a7 1a 00 01 b9 04 00 2b 50 10 b0 0c e3 40 > > Call Trace: > > [<00000000088a30fc>] ext3_journal_start+0x8c/0xa4 [ext3] > > [<0000000008896822>] ext3_dirty_inode+0x3a/0xe0 [ext3] > > [<00000000001ca362>] __mark_inode_dirty+0x1ae/0x1c8 > > [<00000000001bfaa0>] iput+0xbc/0xf0 > > [<00000000001bdcca>] prune_dcache+0x29e/0x584 > > [<00000000001bdfe4>] shrink_dcache_memory+0x34/0x54 > > [<000000000017b100>] shrink_slab+0x15c/0x250 > > [<000000000017b6e4>] try_to_free_pages+0x1c0/0x2a4 > > [<0000000000170276>] __alloc_pages+0x2ba/0x4e0 > > [<000000000017059a>] __get_free_pages+0x4e/0x8c > > [<0000000000174ea2>] cache_alloc_refill+0x2a6/0x868 > > [<0000000000175540>] __kmalloc+0xdc/0xe0 > > [<00000000088a4e62>] ext3_xattr_set_handle+0x114a/0x174c [ext3] > > [<00000000088a54e4>] ext3_xattr_set+0x80/0xd0 [ext3] > > [<00000000088a6312>] ext3_xattr_user_set+0xce/0xe4 [ext3] > > [<00000000088a5f1e>] ext3_setxattr+0x17e/0x18c [ext3] > > [<00000000001c88e6>] setxattr+0x14a/0x234 > > [<00000000001c8a80>] sys_fsetxattr+0xb0/0x110 > > [<000000000011fc10>] sysc_noemu+0x10/0x16 > > How did we get from iput() into __mark_inode_dirty()? I can't see it in > mainline, nor in 2.6.5 which you appear to be using... Hmm, I think it could happen at least via quota code (but then I would expect to see some entry in the backtrace about it).
Honza -- Jan Kara <[EMAIL PROTECTED]> SuSE CR Labs - To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html