Re: Possible dcache BUG

From: Gene Heskett
Date: Sat Aug 14 2004 - 00:22:49 EST


On Friday 13 August 2004 22:18, Marcelo Tosatti wrote:
>On Fri, Aug 13, 2004 at 12:27:24AM -0400, Gene Heskett wrote:
>> On Wednesday 11 August 2004 00:59, Linus Torvalds 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);
> if (buffer_dirty(bh)) {
> ret = 0;
>
Marcelo; I've put in the patch that disables the prefetch, and thats
been running ok so far, but uptime is still pretty short, in hours.
But if it eventually does an Oops on me, the reboot will bring this
one in too, its building right now.

--
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/