xfs
[Top] [All Lists]

Re: [PATCH 0/9] Log and transaction cleanups, factoring and bug fixes

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: [PATCH 0/9] Log and transaction cleanups, factoring and bug fixes
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Tue, 9 Mar 2010 22:48:18 +1100
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20100309113919.GA5479@xxxxxxxxxxxxx>
References: <1267840284-4652-1-git-send-email-david@xxxxxxxxxxxxx> <20100309113919.GA5479@xxxxxxxxxxxxx>
User-agent: Mutt/1.5.18 (2008-05-17)
On Tue, Mar 09, 2010 at 06:39:19AM -0500, Christoph Hellwig wrote:
> With the whole series (and my posted cleanups) applied I get the
> following XFSQA 113 failure (and a similar one before):
> 
> [ 2064.763171] Assertion failed: xfs_lic_are_all_free(licp), file: 
> fs/xfs/xfs_trans.c, line: 1432

Yeah, that's a bogus assert. I found it yesterday on test 113 ;)

The issue is that test 113 is the first QA test that is
semi-reliably creating a transaction with more than one chunk of log
item descriptors. The original assert was:

        ASSERT(!xfs_lic_are_all_free(licp));

before it called xfs_trans_chunk_committed() and ran the commit
processing on all the items in the chunk. It then freed the chunk.
This makes sense - there should be items in the chunk being freed.

I made the bogus assumption when cleaning up the code that after
committed processing on all the items that all the items in the
chunk would be marked as freed. However, nothing cleans up the log
item descriptors in the committed item processing, so the items in
the chunk are all still marked as used.

The fix is to either remove the assert or invert the condition....

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

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