• Darrick J. Wong's avatar
    xfs: cancel intents immediately if process_intents fails · 2e76f188
    Darrick J. Wong authored
    If processing recovered log intent items fails, we need to cancel all
    the unprocessed recovered items immediately so that a subsequent AIL
    push in the bail out path won't get wedged on the pinned intent items
    that didn't get processed.
    
    This can happen if the log contains (1) an intent that gets and releases
    an inode, (2) an intent that cannot be recovered successfully, and (3)
    some third intent item.  When recovery of (2) fails, we leave (3) pinned
    in memory.  Inode reclamation is called in the error-out path of
    xfs_mountfs before xfs_log_cancel_mount.  Reclamation calls
    xfs_ail_push_all_sync, which gets stuck waiting for (3).
    
    Therefore, call xlog_recover_cancel_intents if _process_intents fails.
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    2e76f188
xfs_log_recover.c 97.9 KB