xfs
[Top] [All Lists]

Re: [PATCH 50/50] xfs: use reference counts to free clean buffer items

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: [PATCH 50/50] xfs: use reference counts to free clean buffer items
From: Mark Tinguely <tinguely@xxxxxxx>
Date: Wed, 14 Aug 2013 08:26:20 -0500
Cc: xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <20130814035738.GD6023@dastard>
References: <1376304611-22994-1-git-send-email-david@xxxxxxxxxxxxx> <1376304611-22994-51-git-send-email-david@xxxxxxxxxxxxx> <520A4AB7.1080207@xxxxxxx> <20130813214648.GC6023@dastard> <520AAC79.1030608@xxxxxxx> <20130814035738.GD6023@dastard>
User-agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:9.0) Gecko/20120122 Thunderbird/9.0
On 08/13/13 22:57, Dave Chinner wrote:
On Tue, Aug 13, 2013 at 05:00:25PM -0500, Mark Tinguely wrote:
On 08/13/13 16:46, Dave Chinner wrote:
On Tue, Aug 13, 2013 at 10:03:19AM -0500, Mark Tinguely wrote:
On 08/12/13 05:50, Dave Chinner wrote:
From: Dave Chinner<dchinner@xxxxxxxxxx>

When a transaction is cancelled and the buffer log item is clean in

...


why is a clean buffer on the AIL? Racing with a completion handler?

"clean" means that it wasn't dirtied in the transaction - it can be
in the AIL and holding a reference count that way.

I am wondering because it should not have made it into the CIL if it
was not dirtied in a transaction - at least according to the the log
item descriptor flag at least.

CIL != AIL. IOWs, the bli_refcount going to zero doesn't always
mean the bli should be freed. All a zero value means is that it is
not tracked by any transaction. If the item is not going to be
placed in the AIL (or not already in the AIL) then it can be
released (freed). Clean or aborted items are not going into the AIL,
so they can be freed immeidately. Everything else needs to avoid
freeing the item until the correct state is reached, even if the ref
count goes to zero.


yep.

You are saying that the problem is releasing a buffer that is clean and also in the AIL, I am just trying to figure out if you are fixing a symptom or the problem.

--Mark.

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