• Xiaole He's avatar
    xfs: fix comment for start time value of inode with bigtime enabled · fdbae121
    Xiaole He authored
    The 'ctime', 'mtime', and 'atime' for inode is the type of
    'xfs_timestamp_t', which is a 64-bit type:
    
    /* fs/xfs/libxfs/xfs_format.h begin */
    typedef __be64 xfs_timestamp_t;
    /* fs/xfs/libxfs/xfs_format.h end */
    
    When the 'bigtime' feature is disabled, this 64-bit type is splitted
    into two parts of 32-bit, one part is encoded for seconds since
    1970-01-01 00:00:00 UTC, the other part is encoded for nanoseconds
    above the seconds, this two parts are the type of
    'xfs_legacy_timestamp' and the min and max time value of this type are
    defined as macros 'XFS_LEGACY_TIME_MIN' and 'XFS_LEGACY_TIME_MAX':
    
    /* fs/xfs/libxfs/xfs_format.h begin */
    struct xfs_legacy_timestamp {
            __be32          t_sec;          /* timestamp seconds */
            __be32          t_nsec;         /* timestamp nanoseconds */
    };
     #define XFS_LEGACY_TIME_MIN     ((int64_t)S32_MIN)
     #define XFS_LEGACY_TIME_MAX     ((int64_t)S32_MAX)
    /* fs/xfs/libxfs/xfs_format.h end */
    /* include/linux/limits.h begin */
     #define U32_MAX         ((u32)~0U)
     #define S32_MAX         ((s32)(U32_MAX >> 1))
     #define S32_MIN         ((s32)(-S32_MAX - 1))
    /* include/linux/limits.h end */
    
    'XFS_LEGACY_TIME_MIN' is the min time value of the
    'xfs_legacy_timestamp', that is -(2^31) seconds relative to the
    1970-01-01 00:00:00 UTC, it can be converted to human-friendly time
    value by 'date' command:
    
    /* command begin */
    [root@~]# date --utc -d '@0' +'%Y-%m-%d %H:%M:%S'
    1970-01-01 00:00:00
    [root@~]# date --utc -d "@`echo '-(2^31)'|bc`" +'%Y-%m-%d %H:%M:%S'
    1901-12-13 20:45:52
    [root@~]#
    /* command end */
    
    When 'bigtime' feature is enabled, this 64-bit type becomes a 64-bit
    nanoseconds counter, with the start time value is the min time value of
    'xfs_legacy_timestamp'(start time means the value of 64-bit nanoseconds
    counter is 0). We have already caculated the min time value of
    'xfs_legacy_timestamp', that is 1901-12-13 20:45:52 UTC, but the comment
    for the start time value of inode with 'bigtime' feature enabled writes
    the value is 1901-12-31 20:45:52 UTC:
    
    /* fs/xfs/libxfs/xfs_format.h begin */
    /*
     * XFS Timestamps
     * ==============
     * When the bigtime feature is enabled, ondisk inode timestamps become an
     * unsigned 64-bit nanoseconds counter.  This means that the bigtime inode
     * timestamp epoch is the start of the classic timestamp range, which is
     * Dec 31 20:45:52 UTC 1901. ...
     ...
     */
    /* fs/xfs/libxfs/xfs_format.h end */
    
    That is a typo, and this patch corrects the typo, from 'Dec 31' to
    'Dec 13'.
    Suggested-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Signed-off-by: default avatarXiaole He <hexiaole@kylinos.cn>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    fdbae121
xfs_format.h 63.2 KB