exfat-nofuse: fix compilation during kernel time64 transition
authorYousong Zhou <yszhou4tech@gmail.com>
Tue, 8 Jan 2019 16:09:04 +0000 (16:09 +0000)
committerYousong Zhou <yszhou4tech@gmail.com>
Wed, 9 Jan 2019 10:34:09 +0000 (10:34 +0000)
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>
kernel/exfat-nofuse/Makefile
kernel/exfat-nofuse/patches/0001-exfat_oal-use-get_seconds-directly.patch [new file with mode: 0644]
kernel/exfat-nofuse/patches/0002-4.18.patch.patch [new file with mode: 0644]

index e2dfba2b718c5d14119f6004048d5ccccd3cf161..e2392100bfa685c74501bc6cbedfb220ff2d405b 100644 (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
diff --git a/kernel/exfat-nofuse/patches/0001-exfat_oal-use-get_seconds-directly.patch b/kernel/exfat-nofuse/patches/0001-exfat_oal-use-get_seconds-directly.patch
new file mode 100644 (file)
index 0000000..7d5295e
--- /dev/null
@@ -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? */
diff --git a/kernel/exfat-nofuse/patches/0002-4.18.patch.patch b/kernel/exfat-nofuse/patches/0002-4.18.patch.patch
new file mode 100644 (file)
index 0000000..5da3c69
--- /dev/null
@@ -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;