]> git.proxmox.com Git - zfsonlinux.git/blame - zfs-patches/0020-Linux-4.16-compat-inode_set_iversion.patch
update SPL to 0.7.7
[zfsonlinux.git] / zfs-patches / 0020-Linux-4.16-compat-inode_set_iversion.patch
CommitLineData
75b07eca
FG
1From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2From: Brian Behlendorf <behlendorf1@llnl.gov>
3Date: Thu, 8 Feb 2018 14:27:59 -0800
4Subject: [PATCH] Linux 4.16 compat: inode_set_iversion()
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
8
9A new interface was added to manipulate the version field of an
10inode. Add a inode_set_iversion() wrapper for older kernels and
11use the new interface when available.
12
13The i_version field was dropped from the trace point due to the
14switch to an atomic64_t i_version type.
15
16Reviewed-by: Olaf Faaland <faaland1@llnl.gov>
17Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
18Reviewed-by: Chunwei Chen <david.chen@nutanix.com>
19Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
20Closes #7148
21(cherry picked from commit 310e63dfd18f59ad583631dfa2f55d40cedf1415)
22Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
23---
24 include/linux/vfs_compat.h | 14 ++++++++++++++
25 include/sys/trace_acl.h | 6 ++----
26 module/zfs/zpl_super.c | 2 +-
27 config/kernel-inode-set-iversion.m4 | 19 +++++++++++++++++++
28 config/kernel.m4 | 1 +
29 5 files changed, 37 insertions(+), 5 deletions(-)
30 create mode 100644 config/kernel-inode-set-iversion.m4
31
32diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h
33index 6111f0afc..f51ff887d 100644
34--- a/include/linux/vfs_compat.h
35+++ b/include/linux/vfs_compat.h
36@@ -578,4 +578,18 @@ current_time(struct inode *ip)
37 }
38 #endif
39
40+/*
41+ * 4.16 API change
42+ * Added iversion interface for managing inode version field.
43+ */
44+#ifdef HAVE_INODE_SET_IVERSION
45+#include <linux/iversion.h>
46+#else
47+static inline void
48+inode_set_iversion(struct inode *ip, u64 val)
49+{
50+ ip->i_version = val;
51+}
52+#endif
53+
54 #endif /* _ZFS_VFS_H */
55diff --git a/include/sys/trace_acl.h b/include/sys/trace_acl.h
56index 1057e560b..610bbe29c 100644
57--- a/include/sys/trace_acl.h
58+++ b/include/sys/trace_acl.h
59@@ -68,7 +68,6 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
60 __field(uint32_t, i_gid)
61 __field(unsigned long, i_ino)
62 __field(unsigned int, i_nlink)
63- __field(u64, i_version)
64 __field(loff_t, i_size)
65 __field(unsigned int, i_blkbits)
66 __field(unsigned short, i_bytes)
67@@ -103,7 +102,6 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
68 __entry->i_gid = KGID_TO_SGID(ZTOI(zn)->i_gid);
69 __entry->i_ino = zn->z_inode.i_ino;
70 __entry->i_nlink = zn->z_inode.i_nlink;
71- __entry->i_version = zn->z_inode.i_version;
72 __entry->i_size = zn->z_inode.i_size;
73 __entry->i_blkbits = zn->z_inode.i_blkbits;
74 __entry->i_bytes = zn->z_inode.i_bytes;
75@@ -121,7 +119,7 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
76 "mapcnt %llu size %llu pflags %llu "
77 "sync_cnt %u mode 0x%x is_sa %d "
78 "is_mapped %d is_ctldir %d is_stale %d inode { "
79- "uid %u gid %u ino %lu nlink %u version %llu size %lli "
80+ "uid %u gid %u ino %lu nlink %u size %lli "
81 "blkbits %u bytes %u mode 0x%x generation %x } } "
82 "ace { type %u flags %u access_mask %u } mask_matched %u",
83 __entry->z_id, __entry->z_unlinked, __entry->z_atime_dirty,
84@@ -131,7 +129,7 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
85 __entry->z_is_sa, __entry->z_is_mapped,
86 __entry->z_is_ctldir, __entry->z_is_stale, __entry->i_uid,
87 __entry->i_gid, __entry->i_ino, __entry->i_nlink,
88- __entry->i_version, __entry->i_size, __entry->i_blkbits,
89+ __entry->i_size, __entry->i_blkbits,
90 __entry->i_bytes, __entry->i_mode, __entry->i_generation,
91 __entry->z_type, __entry->z_flags, __entry->z_access_mask,
92 __entry->mask_matched)
93diff --git a/module/zfs/zpl_super.c b/module/zfs/zpl_super.c
94index b6ef60277..25e75a897 100644
95--- a/module/zfs/zpl_super.c
96+++ b/module/zfs/zpl_super.c
97@@ -36,7 +36,7 @@ zpl_inode_alloc(struct super_block *sb)
98 struct inode *ip;
99
100 VERIFY3S(zfs_inode_alloc(sb, &ip), ==, 0);
101- ip->i_version = 1;
102+ inode_set_iversion(ip, 1);
103
104 return (ip);
105 }
106diff --git a/config/kernel-inode-set-iversion.m4 b/config/kernel-inode-set-iversion.m4
107new file mode 100644
108index 000000000..9a7d7890e
109--- /dev/null
110+++ b/config/kernel-inode-set-iversion.m4
111@@ -0,0 +1,19 @@
112+dnl #
113+dnl # 4.16 API change
114+dnl # inode_set_iversion introduced to set i_version
115+dnl #
116+AC_DEFUN([ZFS_AC_KERNEL_INODE_SET_IVERSION], [
117+ AC_MSG_CHECKING([whether inode_set_iversion() exists])
118+ ZFS_LINUX_TRY_COMPILE([
119+ #include <linux/iversion.h>
120+ ],[
121+ struct inode inode;
122+ inode_set_iversion(&inode, 1);
123+ ],[
124+ AC_MSG_RESULT(yes)
125+ AC_DEFINE(HAVE_INODE_SET_IVERSION, 1,
126+ [inode_set_iversion() exists])
127+ ],[
128+ AC_MSG_RESULT(no)
129+ ])
130+])
131diff --git a/config/kernel.m4 b/config/kernel.m4
132index b759ccd39..b83f021e8 100644
133--- a/config/kernel.m4
134+++ b/config/kernel.m4
135@@ -65,6 +65,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
136 ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL
137 ZFS_AC_KERNEL_INODE_OPERATIONS_GETATTR
138 ZFS_AC_KERNEL_INODE_SET_FLAGS
139+ ZFS_AC_KERNEL_INODE_SET_IVERSION
140 ZFS_AC_KERNEL_GET_ACL_HANDLE_CACHE
141 ZFS_AC_KERNEL_SHOW_OPTIONS
142 ZFS_AC_KERNEL_FILE_INODE
143--
1442.14.2
145