lkml.org 
[lkml]   [2016]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 10/24] fs: udf: Replace CURRENT_TIME with current_time()
    Date
    CURRENT_TIME is not y2038 safe.

    CURRENT_TIME macro is also not appropriate for filesystems
    as it doesn't use the right granularity for filesystem
    timestamps.

    Logical Volume Integrity format is described to have the
    same timestamp format for "Recording Date and time" as
    the other [a,c,m]timestamps.
    The function udf_time_to_disk_format() does this conversion.
    Hence the timestamp is passed directly to the function and
    not truncated. This is as per Arnd's suggestion on the
    thread.

    This is also in preparation for the patch that transitions
    vfs timestamps to use 64 bit time and hence make them
    y2038 safe. As part of the effort current_time() will be
    extended to do range checks.

    Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
    Cc: Jan Kara <jack@suse.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    ---
    fs/udf/super.c | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/fs/udf/super.c b/fs/udf/super.c
    index 4942549..967ad87 100644
    --- a/fs/udf/super.c
    +++ b/fs/udf/super.c
    @@ -1986,6 +1986,7 @@ static void udf_open_lvid(struct super_block *sb)
    struct buffer_head *bh = sbi->s_lvid_bh;
    struct logicalVolIntegrityDesc *lvid;
    struct logicalVolIntegrityDescImpUse *lvidiu;
    + struct timespec ts;

    if (!bh)
    return;
    @@ -1997,8 +1998,8 @@ static void udf_open_lvid(struct super_block *sb)
    mutex_lock(&sbi->s_alloc_mutex);
    lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
    lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
    - udf_time_to_disk_stamp(&lvid->recordingDateAndTime,
    - CURRENT_TIME);
    + ktime_get_real_ts(&ts);
    + udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts);
    lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN);

    lvid->descTag.descCRC = cpu_to_le16(
    @@ -2019,6 +2020,7 @@ static void udf_close_lvid(struct super_block *sb)
    struct buffer_head *bh = sbi->s_lvid_bh;
    struct logicalVolIntegrityDesc *lvid;
    struct logicalVolIntegrityDescImpUse *lvidiu;
    + struct timespec ts;

    if (!bh)
    return;
    @@ -2030,7 +2032,8 @@ static void udf_close_lvid(struct super_block *sb)
    mutex_lock(&sbi->s_alloc_mutex);
    lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
    lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
    - udf_time_to_disk_stamp(&lvid->recordingDateAndTime, CURRENT_TIME);
    + ktime_get_real_ts(&ts);
    + udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts);
    if (UDF_MAX_WRITE_VERSION > le16_to_cpu(lvidiu->maxUDFWriteRev))
    lvidiu->maxUDFWriteRev = cpu_to_le16(UDF_MAX_WRITE_VERSION);
    if (sbi->s_udfrev > le16_to_cpu(lvidiu->minUDFReadRev))
    --
    1.9.1
    \
     
     \ /
      Last update: 2016-06-26 00:21    [W:5.087 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site