xfs
[Top] [All Lists]

Re: assertion failure with latest xfs

To: Lachlan McIlroy <lachlan@xxxxxxx>
Subject: Re: assertion failure with latest xfs
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Thu, 30 Oct 2008 16:38:33 +1100
Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
In-reply-to: <49091BFC.3000503@xxxxxxx>
Mail-followup-to: Lachlan McIlroy <lachlan@xxxxxxx>, Christoph Hellwig <hch@xxxxxxxxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
References: <49003EFF.4090404@xxxxxxx> <20081023173149.GA30316@xxxxxxxxxxxxx> <20081023222126.GA18495@disturbed> <4907B1B3.4020008@xxxxxxx> <20081029032941.GG4985@disturbed> <49091BFC.3000503@xxxxxxx>
User-agent: Mutt/1.5.18 (2008-05-17)
On Thu, Oct 30, 2008 at 01:29:16PM +1100, Lachlan McIlroy wrote:
> Dave Chinner wrote:
>> On Wed, Oct 29, 2008 at 11:43:31AM +1100, Lachlan McIlroy wrote:
>>> Dave Chinner wrote:
>>>> Hmmmm - there's also another bug in xfs_iget_cache_hit() - we don't
>>>> drop the reference we got if we found an unlinked inode after the
>>>> igrab() (the ENOENT case). I'll fix that as well.
>>>>
>>>> Patch below that I'm currently running through xfsqa.
>>> I gave this patch a go and it still asserted at the same place running
>>> the same test.
>>
>> Can you put more inode trace points in so that we can see where the
>> extra reference is coming from?
>
> xfs_sync_inodes_ag() found the inode before it was completely
> initialised.
>
> --> itrace @ 0xffff880078d67800/0xffff880073563e40
> ref @fs/xfs/xfs_inode.c:863(xfs_inode_alloc+0x205) i_count = 1
>   cpu = 2 pid = 9938   ra = xfs_iread+0x29
> exit from xfs_iget.alloc i_count = 1
>   cpu = 2 pid = 9938   ra = xfs_trans_iget+0x205
> ref @fs/xfs/xfs_iget.c:218(xfs_iget+0x585) i_count = 1
>   cpu = 2 pid = 9938   ra = xfs_trans_iget+0x205
> ref @fs/xfs/xfs_iget.c:305(xfs_iget+0x643) i_count = 1
>   cpu = 2 pid = 9938   ra = xfs_trans_iget+0x205
> ref @fs/xfs/linux-2.6/xfs_sync.c:113(xfs_sync_inodes_ag+0x118) i_count = 1
>   cpu = 3 pid = 9953   ra = xfs_sync_inodes+0x68
> ref @fs/xfs/linux-2.6/xfs_iops.c:780(xfs_setup_inode+0x2c) i_count = 2
>   cpu = 2 pid = 9938   ra = xfs_ialloc+0x5d8

Ah - ok, that makes sense now. That should be trivial to fix up;
we just need to avoid XFS_INEW() inodes in xfs_sync_inodes_ag()
and probably also in xfs_qm_dqrele_all(), and that will mean
the assert needs to be removed as well.

Patch soon.

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

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