On Wed, Mar 30, 2022 at 12:10:41PM +1100, Dave Chinner wrote: > xfs_iflush_abort() can be called without the buffer lock being held > resulting in inodes being removed from the buffer list while other > list operations are occurring. This causes problems with corrupted > bp->b_io_list inode lists during filesystem shutdown, leading to > traversals that never end, double removals from the AIL, etc. > > Fix this by passing the buffer to xfs_iflush_abort() if we have > it locked. If the inode is attached to the buffer, we're going to > have to remove it from the buffer list and we'd have to get the > buffer off the inode log item to do that anyway. There is not buffer passed to xfs_iflush_abort. I think this now needs to say "Fix this by ensuring the inode buffer is locked when calling xfs_iflush_abort if the inode is attached to a buffer." or something like that. The code changes themselves looks good: Reviewed-by: Christoph Hellwig <hch@xxxxxx>