xfs
[Top] [All Lists]

Re: review: use correct buffer flags when reading superblock

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: review: use correct buffer flags when reading superblock
From: Lachlan McIlroy <lachlan@xxxxxxx>
Date: Fri, 19 Oct 2007 11:32:18 +1000
Cc: David Chinner <dgc@xxxxxxx>, xfs-dev <xfs-dev@xxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
In-reply-to: <20071018154649.GA16837@xxxxxxxxxxxxx>
References: <470C8F5B.90705@xxxxxxx> <20071010093451.GA7655@xxxxxxxxxxxxx> <20071010112505.GH23367404@xxxxxxx> <20071018154649.GA16837@xxxxxxxxxxxxx>
Reply-to: lachlan@xxxxxxx
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Thunderbird 2.0.0.4 (X11/20070604)
Christoph Hellwig wrote:
On Wed, Oct 10, 2007 at 09:25:06PM +1000, David Chinner wrote:
Where are these set up in the first time?  AFAICS the buffer only written
out by xfs_unmountfs_writesb, xfs_syncsub and xfs_trans_log_buf, and all
these should only ever happen after log recovery has finished.
It can also be written by xfsbufd when it has been bdwrite()
or as a result of log tail pushing.

Hmm, true.

Because the superblock buffer is XBF_FS_MANAGED, it does not get
torn down when it is clean and has no references, so the XBF_ASYNC
flag never gets cleared unless the fs specifically clears it. If the
superblock is then not recovered out of any further transactions
during recovery after xfsbufd flushed it, the XBF_ASYNC flag remains
set for the re-read that is issued in xlog_do_recover() and we
hang.....

Makes sense as an explanation.  I still don't really like patch, maybe
we should always clear the ASYNC flag in the b_iodone callback?


That sounds like a good idea.  Or get rid of the XBF_FS_MANAGED special
case and get a new fresh buffer each time.


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