• Dave Chinner's avatar
    xfs: ensure we mark all inodes in a freed cluster XFS_ISTALE · 5b3eed75
    Dave Chinner authored
    Under heavy load parallel metadata loads (e.g. dbench), we can fail
    to mark all the inodes in a cluster being freed as XFS_ISTALE as we
    skip inodes we cannot get the XFS_ILOCK_EXCL or the flush lock on.
    When this happens and the inode cluster buffer has already been
    marked stale and freed, inode reclaim can try to write the inode out
    as it is dirty and not marked stale. This can result in writing th
    metadata to an freed extent, or in the case it has already
    been overwritten trigger a magic number check failure and return an
    EUCLEAN error such as:
    
    Filesystem "ram0": inode 0x442ba1 background reclaim flush failed with 117
    
    Fix this by ensuring that we hoover up all in memory inodes in the
    cluster and mark them XFS_ISTALE when freeing the cluster.
    
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    5b3eed75
xfs_inode.c 121 KB