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. _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs