xfs
[Top] [All Lists]

Re: 2.6.31 xfs_fs_destroy_inode: cannot reclaim

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: 2.6.31 xfs_fs_destroy_inode: cannot reclaim
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Mon, 19 Oct 2009 12:17:10 +1100
Cc: Tommy van Leeuwen <tommy@xxxxxxxxxxxxxxxx>, Patrick Schreurs <patrick@xxxxxxxxxxxxxxxx>, Bas Couwenberg <bas@xxxxxxxxxxxxxxxx>, XFS List <xfs@xxxxxxxxxxx>
In-reply-to: <20091018235910.GA30045@xxxxxxxxxxxxx>
References: <20090930124104.GA7463@xxxxxxxxxxxxx> <4AC60D27.9060703@xxxxxxxxxxxxxxxx> <20091005214348.GA15448@xxxxxxxxxxxxx> <4ACB080D.3010708@xxxxxxxxxxxxxxxx> <20091007011926.GB32032@xxxxxxxxxxxxx> <4AD18C8D.90808@xxxxxxxxxxxxxxxx> <20091012233854.GA29446@xxxxxxxxxxxxx> <89c4f90c0910150806g49c64037re550b478a7cf85e@xxxxxxxxxxxxxx> <20091018235910.GA30045@xxxxxxxxxxxxx>
User-agent: Mutt/1.5.18 (2008-05-17)
On Sun, Oct 18, 2009 at 07:59:10PM -0400, Christoph Hellwig wrote:
> On Thu, Oct 15, 2009 at 05:06:57PM +0200, Tommy van Leeuwen wrote:
> > > Thanks. ?The patch below should fix the inode reclaim race that could
> > > lead to the double free you're seeing. ?To be applied ontop of all
> > > the other patches I sent you.
> > 
> > Hi Christoph,
> > 
> > Here are 2 more crashes with this patch applied, both having xfs_debug
> > on and showing different traces (not inode reclaim related?). Hope
> > it's usefull.
> 
> Can't make too much sense of it, but the dir2 is something you reported
> earlier already.  We must be stomping over inodes somewhere, but I'm
> not too sure where exactly.  Can you try throwing the patch below ontop
> of your stack?  It fixes an area where we could theoretically corrupt
> inode state.
> 
> Index: xfs/fs/xfs/linux-2.6/xfs_sync.c
> ===================================================================
> --- xfs.orig/fs/xfs/linux-2.6/xfs_sync.c      2009-10-16 22:54:41.513254291 
> +0200
> +++ xfs/fs/xfs/linux-2.6/xfs_sync.c   2009-10-16 22:57:10.451256293 +0200
> @@ -180,6 +180,11 @@ xfs_sync_inode_valid(
>               return EFSCORRUPTED;
>       }
>  
> +     if (xfs_iflags_test(ip, XFS_INEW | XFS_IRECLAIMABLE | XFS_IRECLAIM)) {
> +             read_unlock(&pag->pag_ici_lock);
> +             return ENOENT;
> +     }

This needs an IRELE(ip) here, doesn't it?

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

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