xfs
[Top] [All Lists]

Re: xfs oops (CVS-2004-05-15_05:00_UTC)

To: Krzysztof Rusocki <kszysiu@xxxxxxxxxxxxxxxxxxxx>
Subject: Re: xfs oops (CVS-2004-05-15_05:00_UTC)
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Thu, 24 Jun 2004 13:14:41 +0100
Cc: Nathan Scott <nathans@xxxxxxx>, linux-xfs@xxxxxxxxxxx
In-reply-to: <20040624114608.GF1323@iceberg.elsat.net.pl>
References: <20040621010330.GA1295@iceberg.elsat.net.pl> <20040621021505.GA1173@frodo> <20040621025905.GA1323@iceberg.elsat.net.pl> <20040621072906.GD1656@frodo> <20040622082906.GA2093@frodo> <20040623084922.GD1323@iceberg.elsat.net.pl> <20040623203639.A1670881@wobbly.melbourne.sgi.com> <20040623131611.GE1323@iceberg.elsat.net.pl> <20040624024320.GB5866@frodo> <20040624114608.GF1323@iceberg.elsat.net.pl>
Sender: linux-xfs-bounce@xxxxxxxxxxx
User-agent: Mutt/1.4.1i
> Okay, I've run even more tests yesterday and during the night, conclusions:
> 
> - current CVS without 1.1371.750.18 - oops in ... minutes
> - current CVS without undelay changes
>   (xfs_buf.c 1.171, xfs_buf.h 1.97) - minutes.. aswell
> - current CVS without 1.1371.750.18 _and_ undelay changes - no problems
>   (tested 10 hours)
> - current CVS without 1.1371.750.18, 1.1587.5.6 1.1722.10.100 and undelay
>   changes - no problems (tested 14 hours)

Hmmm, this makes me wonder whether we might still have a freed buffer
on the delwri list somewhere.  Can you test with the patch below instead
of the previous one?


===== fs/xfs/linux-2.6/xfs_buf.c 1.116 vs edited =====
--- 1.116/fs/xfs/linux-2.6/xfs_buf.c    2004-05-28 03:45:07 +02:00
+++ edited/fs/xfs/linux-2.6/xfs_buf.c   2004-06-24 14:13:12 +02:00
@@ -310,7 +310,15 @@
 {
        PB_TRACE(bp, "free", 0);
 
+       ASSERT(list_empty(&pb->pb_list));
        ASSERT(list_empty(&bp->pb_hash_list));
+       ASSERT(!(bp->pb_flags & PBF_DELWRI));
+
+       if (!bp->pb_pages) {
+               printk("pagebuf without pb_pages?\n");
+               dump_stack();
+               goto out;
+       }
 
        if (bp->pb_flags & _PBF_PAGE_CACHE) {
                uint            i;
@@ -331,6 +339,7 @@
                _pagebuf_free_pages(bp);
        }
 
+ out:
        pagebuf_deallocate(bp);
 }
 


<Prev in Thread] Current Thread [Next in Thread>