]> granicus.if.org Git - zfs/commitdiff
Linux 4.18 compat: Use ktime_get_coarse_real_ts64()
authorTony Hutter <hutter2@llnl.gov>
Wed, 9 Jan 2019 21:16:39 +0000 (13:16 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 28 Jan 2019 18:11:03 +0000 (10:11 -0800)
Newer kernels remove current_kernel_time64().  Use
ktime_get_coarse_real_ts64() in its place.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Closes #8258

config/kernel-ktime_get_coarse_real_ts64.m4 [new file with mode: 0644]
config/kernel.m4
include/spl/sys/time.h

diff --git a/config/kernel-ktime_get_coarse_real_ts64.m4 b/config/kernel-ktime_get_coarse_real_ts64.m4
new file mode 100644 (file)
index 0000000..d6be8c4
--- /dev/null
@@ -0,0 +1,18 @@
+dnl #
+dnl # 4.18: ktime_get_coarse_real_ts64() added.  Use it in place of
+dnl # current_kernel_time64().
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_KTIME_GET_COARSE_REAL_TS64],
+       [AC_MSG_CHECKING([whether ktime_get_coarse_real_ts64() exists])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/mm.h>
+       ], [
+               struct timespec64 ts;
+               ktime_get_coarse_real_ts64(&ts);
+       ], [
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_KTIME_GET_COARSE_REAL_TS64, 1, [ktime_get_coarse_real_ts64() exists])
+       ], [
+               AC_MSG_RESULT(no)
+       ])
+])
index 7330c00e1bd20555cbfd60bba31102afca25e1ad..098c4370073a3b4309b4f5a92d37d626fd1db148 100644 (file)
@@ -161,6 +161,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_ACL_HAS_REFCOUNT
        ZFS_AC_KERNEL_USERNS_CAPABILITIES
        ZFS_AC_KERNEL_IN_COMPAT_SYSCALL
+       ZFS_AC_KERNEL_KTIME_GET_COARSE_REAL_TS64
 
        AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
                KERNEL_MAKE="$KERNEL_MAKE O=$LINUX_OBJ"
index 1a986c9b97cd75c71a31b58ae756be5a522a7d65..312415b7bc83aa49e584a1c4ea5dcbf0357589d2 100644 (file)
@@ -73,7 +73,13 @@ static inline void
 gethrestime(inode_timespec_t *ts)
 {
 #if defined(HAVE_INODE_TIMESPEC64_TIMES)
+
+#if defined(HAVE_KTIME_GET_COARSE_REAL_TS64)
+       ktime_get_coarse_real_ts64(ts);
+#else
        *ts = current_kernel_time64();
+#endif /* HAVE_KTIME_GET_COARSE_REAL_TS64 */
+
 #else
        *ts = current_kernel_time();
 #endif
@@ -83,7 +89,13 @@ static inline time_t
 gethrestime_sec(void)
 {
 #if defined(HAVE_INODE_TIMESPEC64_TIMES)
+#if defined(HAVE_KTIME_GET_COARSE_REAL_TS64)
+       inode_timespec_t ts;
+       ktime_get_coarse_real_ts64(&ts);
+#else
        inode_timespec_t ts = current_kernel_time64();
+#endif  /* HAVE_KTIME_GET_COARSE_REAL_TS64 */
+
 #else
        inode_timespec_t ts = current_kernel_time();
 #endif