• D
    xfs: rework stale inodes in xfs_ifree_cluster · 71e3e356
    Dave Chinner 提交于
    Once we have inodes pinning the cluster buffer and attached whenever
    they are dirty, we no longer have a guarantee that the items are
    flush locked when we lock the cluster buffer. Hence we cannot just
    walk the buffer log item list and modify the attached inodes.
    
    If the inode is not flush locked, we have to ILOCK it first and then
    flush lock it to do all the prerequisite checks needed to avoid
    races with other code. This is already handled by
    xfs_ifree_get_one_inode(), so rework the inode iteration loop and
    function to update all inodes in cache whether they are attached to
    the buffer or not.
    
    Note: we also remove the copying of the log item lsn to the
    ili_flush_lsn as xfs_iflush_done() now uses the XFS_ISTALE flag to
    trigger aborts and so flush lsn matching is not needed in IO
    completion for processing freed inodes.
    Signed-off-by: NDave Chinner <dchinner@redhat.com>
    Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: NBrian Foster <bfoster@redhat.com>
    Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
    71e3e356
xfs_inode.c 107.4 KB