From 5cb4bc686c5c4af84dbd2b29a1ac1afe16f3691b Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Tue, 8 Jan 2019 16:09:04 +0000 Subject: [PATCH] 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 --- kernel/exfat-nofuse/Makefile | 3 +- ...1-exfat_oal-use-get_seconds-directly.patch | 31 ++++++++++++++ .../patches/0002-4.18.patch.patch | 42 +++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 kernel/exfat-nofuse/patches/0001-exfat_oal-use-get_seconds-directly.patch create mode 100644 kernel/exfat-nofuse/patches/0002-4.18.patch.patch diff --git a/kernel/exfat-nofuse/Makefile b/kernel/exfat-nofuse/Makefile index e2dfba2b71..e2392100bf 100644 --- a/kernel/exfat-nofuse/Makefile +++ b/kernel/exfat-nofuse/Makefile @@ -1,5 +1,6 @@ # # Copyright (C) 2014 Bruno Randolf +# Copyright (C) 2019 Yousong Zhou # # 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 index 0000000000..7d5295ecb3 --- /dev/null +++ b/kernel/exfat-nofuse/patches/0001-exfat_oal-use-get_seconds-directly.patch @@ -0,0 +1,31 @@ +From c0d3452e0366e2ab4fc51e7981e48636facdf486 Mon Sep 17 00:00:00 2001 +From: Yousong Zhou +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 index 0000000000..5da3c69f56 --- /dev/null +++ b/kernel/exfat-nofuse/patches/0002-4.18.patch.patch @@ -0,0 +1,42 @@ +From 4b9607d6fd4a35d9bb35527fae7aac23d848c0ce Mon Sep 17 00:00:00 2001 +From: Yousong Zhou +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;