exfat-nofuse: fix compilation during kernel time64 transition

The change has been compile-tested against the following vanilla kernels

 - linux-3.18.130.tar.xz
 - linux-4.14.90.tar.xz
 - linux-4.19.9.tar.xz
 - linux-4.9.146.tar.xz

Run tested with QEMU malta/be with kernel 4.9.146

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
This commit is contained in:
Yousong Zhou 2019-01-08 16:09:04 +00:00
parent 8cfbcfd757
commit 5cb4bc686c
3 changed files with 75 additions and 1 deletions

View File

@ -1,5 +1,6 @@
#
# Copyright (C) 2014 Bruno Randolf <br1@einfach.org>
# Copyright (C) 2019 Yousong Zhou <yszhou4tech@gmail.com>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
@ -9,7 +10,7 @@ include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=exfat-nofuse
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_SOURCE_URL:=https://github.com/dorimanx/exfat-nofuse.git
PKG_SOURCE_PROTO:=git

View File

@ -0,0 +1,31 @@
From c0d3452e0366e2ab4fc51e7981e48636facdf486 Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Tue, 8 Jan 2019 15:45:26 +0000
Subject: [PATCH 1/2] exfat_oal: use get_seconds() directly
---
exfat_oal.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/exfat_oal.c b/exfat_oal.c
index 7435442..83f8e4b 100644
--- a/exfat_oal.c
+++ b/exfat_oal.c
@@ -128,16 +128,9 @@ static time_t accum_days_in_year[] = {
TIMESTAMP_T *tm_current(TIMESTAMP_T *tp)
{
- struct timespec ts;
time_t second, day, leap_day, month, year;
-#if LINUX_VERSION_CODE < KERNEL_VERSION(4,8,0)
- ts = CURRENT_TIME_SEC;
-#else
- ktime_get_real_ts(&ts);
-#endif
-
- second = ts.tv_sec;
+ second = get_seconds();
second -= sys_tz.tz_minuteswest * SECS_PER_MIN;
/* Jan 1 GMT 00:00:00 1980. But what about another time zone? */

View File

@ -0,0 +1,42 @@
From 4b9607d6fd4a35d9bb35527fae7aac23d848c0ce Mon Sep 17 00:00:00 2001
From: Yousong Zhou <yszhou4tech@gmail.com>
Date: Tue, 8 Jan 2019 15:45:24 +0000
Subject: [PATCH 2/2] 4.18.patch
Imported from https://aur.archlinux.org/cgit/aur.git/plain/4.18.patch?h=exfat-dkms-git
---
exfat_super.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/exfat_super.c b/exfat_super.c
index 312de36..3ac18b0 100644
--- a/exfat_super.c
+++ b/exfat_super.c
@@ -147,8 +147,13 @@ static time_t accum_days_in_year[] = {
static void _exfat_truncate(struct inode *inode, loff_t old_size);
/* Convert a FAT time/date pair to a UNIX date (seconds since 1 1 70). */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,01)
+void exfat_time_fat2unix(struct exfat_sb_info *sbi, struct timespec64 *ts,
+ DATE_TIME_T *tp)
+#else
void exfat_time_fat2unix(struct exfat_sb_info *sbi, struct timespec *ts,
DATE_TIME_T *tp)
+#endif
{
time_t year = tp->Year;
time_t ld;
@@ -166,8 +171,13 @@ void exfat_time_fat2unix(struct exfat_sb_info *sbi, struct timespec *ts,
}
/* Convert linear UNIX date to a FAT time/date pair. */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,01)
+void exfat_time_unix2fat(struct exfat_sb_info *sbi, struct timespec64 *ts,
+ DATE_TIME_T *tp)
+#else
void exfat_time_unix2fat(struct exfat_sb_info *sbi, struct timespec *ts,
DATE_TIME_T *tp)
+#endif
{
time_t second = ts->tv_sec;
time_t day, month, year;