[Top] [All Lists]

Re: [PATCH 5/6] xfs: fix buffer shudown reference count mismatch

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: [PATCH 5/6] xfs: fix buffer shudown reference count mismatch
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Tue, 6 Nov 2012 07:59:49 -0500
Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx>, xfs@xxxxxxxxxxx
In-reply-to: <20121102234741.GB29378@dastard>
References: <1351816724-3000-1-git-send-email-david@xxxxxxxxxxxxx> <1351816724-3000-6-git-send-email-david@xxxxxxxxxxxxx> <20121102024351.GU29378@dastard> <20121102131326.GG12578@xxxxxxxxxxxxx> <20121102234741.GB29378@dastard>
User-agent: Mutt/1.5.21 (2010-09-15)
On Sat, Nov 03, 2012 at 10:47:41AM +1100, Dave Chinner wrote:
> I think that's irrelevant here - there will *never* be an IO waiter
> at this point in time.  This processing is in log buffer IO
> completion context, so the buffers are still pinned in memory. Hence
> anyone trying to do IO on it will be waiting in xfs_buf_wait_unpin()
> and never get to xfs_buf_iowait(). And because xfs_buf_wait_unpin()
> is called with the buffer lock held, we'll never do the failure
> handling in xfs_buf_item_unpin until the buffer IO is completed and
> it is unlocked.

How do we manage to submit it synchronously then?  The inode and dquot
reclaim xfs_bwrite calls already wait for an unpin first, so I don't
think these are the problem.  The only other call on a live fs seems
to xfs_qm_shake -> xfs_buf_delwri_submit, but that one does wait
for the complete() call on b_iowait.  I suspect we are hitting that
and due to it skipping the wait if b_ioerror is set and waiting on
multiple buffers that complete together might hide the issue.

__xfs_buf_delwri_submit for the wait == true case also seems to be
the only place that actually skips the ispinned check.

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