Re: Possible dcache BUG
From: Gene Heskett
Date: Sat Aug 14 2004 - 00:52:32 EST
On Friday 13 August 2004 22:18, Marcelo Tosatti wrote:
[...]
>
>Hi fellows,
>
>I've taken some time to look at this oopses, and I truly believe we
>are facing real corruption.
>
>The symptom is that an inode's (blockdev) i_mapping->private_list
> gets corrupted, one of its buffer_head's contains a b_assoc_mapping
> list_head with NULL pointers.
>
>And this is not an SMP race, because Gene is not running SMP.
>
>Gene's oops happens when remove_inode_buffers calls
> __remove_assoc_queue(bh)
>
>Ingo's oops happens while remove_inode_buffers does
>
> struct buffer_head *bh = BH_ENTRY(list->next);
>
>which is
>
> mov ffffffd8(%ecx), (%somewhere)
>
>%ecx is zero, so...
>
>There is a bug somewhere.
>
>--- a/fs/buffer.c.original 2004-08-14 00:19:55.000000000 -0300
>+++ b/fs/buffer.c 2004-08-14 00:34:57.000000000 -0300
>@@ -802,6 +802,8 @@
> */
> static inline void __remove_assoc_queue(struct buffer_head *bh)
> {
>+ BUG_ON(bh->b_assoc_buffers.next == NULL);
>+ BUG_ON(bh->b_assoc_buffers.prev == NULL);
> list_del_init(&bh->b_assoc_buffers);
> }
>
>@@ -1073,6 +1075,7 @@
>
> spin_lock(&buffer_mapping->private_lock);
> while (!list_empty(list)) {
>+ BUG_ON(list->next == NULL);
> struct buffer_head *bh = BH_ENTRY(list->next);
During the compile, the above line output this warning:
fs/buffer.c: In function `remove_inode_buffers':
fs/buffer.c:1079: warning: ISO C90 forbids mixed declarations and code
Did the compiler do the right thing? Or is this perchance the bug?
> if (buffer_dirty(bh)) {
> ret = 0;
In any event, its getting sleepy out, good night all.
--
Cheers, Gene
"There are four boxes to be used in defense of liberty:
soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
99.24% setiathome rank, not too shabby for a WV hillbilly
Yahoo.com attorneys please note, additions to this message
by Gene Heskett are:
Copyright 2004 by Maurice Eugene Heskett, all rights reserved.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/