]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
fs: udf: Replace CURRENT_TIME with current_time()
authorDeepa Dinamani <deepa.kernel@gmail.com>
Tue, 3 Jan 2017 03:20:55 +0000 (19:20 -0800)
committerJan Kara <jack@suse.cz>
Tue, 3 Jan 2017 09:51:26 +0000 (10:51 +0100)
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>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/super.c

index 4942549e7dc8b3758dd8c8fadb99e8fba4265c00..967ad8775af2ad2062ab1463b1eb0571bab21c4b 100644 (file)
@@ -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))