• Brian Foster's avatar
    xfs: only run torn log write detection on dirty logs · 7f6aff3a
    Brian Foster authored
    XFS uses CRC verification over a sub-range of the head of the log to
    detect and handle torn writes. This torn log write detection currently
    runs unconditionally at mount time, regardless of whether the log is
    dirty or clean. This is problematic in cases where a filesystem might
    end up being moved across different, incompatible (i.e., opposite
    byte-endianness) architectures.
    
    The problem lies in the fact that log data is not necessarily written in
    an architecture independent format. For example, certain bits of data
    are written in native endian format. Further, the size of certain log
    data structures differs (i.e., struct xlog_rec_header) depending on the
    word size of the cpu. This leads to false positive crc verification
    errors and ultimately failed mounts when a cleanly unmounted filesystem
    is mounted on a system with an incompatible architecture from data that
    was written near the head of the log.
    
    Update the log head/tail discovery code to run torn write detection only
    when the log is not clean. This means something other than an unmount
    record resides at the head of the log and log recovery is imminent. It
    is a requirement to run log recovery on the same type of host that had
    written the content of the dirty log and therefore CRC failures are
    legitimate corruptions in that scenario.
    Reported-by: default avatarJan Beulich <JBeulich@suse.com>
    Tested-by: default avatarJan Beulich <JBeulich@suse.com>
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    
    7f6aff3a
xfs_log_recover.c 144 KB