xfs
[Top] [All Lists]

Re: [PATCH] Don't reset di_format in xfs_ifree()

To: lachlan@xxxxxxx
Subject: Re: [PATCH] Don't reset di_format in xfs_ifree()
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Tue, 10 Feb 2009 20:21:35 -0600
Cc: xfs-oss <xfs@xxxxxxxxxxx>
In-reply-to: <49921B3E.8040406@xxxxxxx>
References: <49921B3E.8040406@xxxxxxx>
User-agent: Thunderbird 2.0.0.19 (Macintosh/20081209)
Lachlan McIlroy wrote:
> I hit a panic while flushing a reclaimed inode that is fairly
> reproducible under load.

With what testcase?

Thanks,
-Eric

> In xfs_iflush_fork() we're led to believe that there are extents
> on this inode but there aren't any.  Actually the inode was a
> directory.  I added some debugging to xfs_ifree() and found
> that di_format was XFS_DINODE_FMT_LOCAL and got reset to
> XFS_DINODE_FMT_EXTENTS and this has confused the code in
> xfs_iflush_fork().
> 
> [<ffffffffa0047de7>] xfs_iext_get_ext+0x6c/0xca [xfs]
> [<ffffffffa004a3d4>] xfs_iflush_fork+0x1b0/0x3c6 [xfs]
> [<ffffffffa004aa3f>] xfs_iflush_int+0x455/0x5a1 [xfs]
> [<ffffffffa004b0da>] xfs_iflush+0x229/0x2d6 [xfs]
> [<ffffffffa007283c>] xfs_reclaim_inode+0xd8/0x10f [xfs]
> [<ffffffffa0072976>] xfs_reclaim_inodes_ag+0x103/0x13e [xfs]
> [<ffffffffa00729f3>] xfs_reclaim_inodes+0x42/0x60 [xfs]
> [<ffffffffa0072d1b>] xfs_sync_worker+0x30/0x8a [xfs]
> [<ffffffffa0073416>] xfssyncd+0x14e/0x1a2 [xfs]
> [<ffffffffa00732c8>] ? xfssyncd+0x0/0x1a2 [xfs]
> [<ffffffff8104fc70>] kthread+0x49/0x79
> 
> I made this change and it passes the load test and XFSQA too.  I'm
> not sure if this is indicative of a bigger problem though.
> 
> Index: xfs-fix/fs/xfs/xfs_inode.c
> ===================================================================
> --- xfs-fix.orig/fs/xfs/xfs_inode.c
> +++ xfs-fix/fs/xfs/xfs_inode.c
> @@ -2165,8 +2165,6 @@ xfs_ifree(
>       ip->i_d.di_forkoff = 0;         /* mark the attr fork not in use */
>       ip->i_df.if_ext_max =
>               XFS_IFORK_DSIZE(ip) / (uint)sizeof(xfs_bmbt_rec_t);
> -     ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS;
> -     ip->i_d.di_aformat = XFS_DINODE_FMT_EXTENTS;
>       /*
>        * Bump the generation count so no one will be confused
>        * by reincarnations of this inode.
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs
> 

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