• B
    xfs: shutdown after buf release in iflush cluster abort path · 22fedd80
    Brian Foster 提交于
    If xfs_iflush_cluster() fails due to corruption, the error path
    issues a shutdown and simulates an I/O completion to release the
    buffer. This code has a couple small problems. First, the shutdown
    sequence can issue a synchronous log force, which is unsafe to do
    with buffer locks held. Second, the simulated I/O completion does not
    guarantee the buffer is async and thus is unlocked and released.
    
    For example, if the last operation on the buffer was a read off disk
    prior to the corruption event, XBF_ASYNC is not set and the buffer
    is left locked and held upon return. This results in a memory leak
    as shown by the following message on module unload:
    
     BUG xfs_buf (...): Objects remaining in xfs_buf on __kmem_cache_shutdown()
    
    Fix both of these problems by setting XBF_ASYNC on the buffer prior
    to the simulated I/O error and performing the shutdown immediately
    after ioend processing when the buffer has been released.
    Signed-off-by: NBrian Foster <bfoster@redhat.com>
    Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
    22fedd80
xfs_inode.c 107.2 KB