aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/kernel-inode-set-iversion.m419
-rw-r--r--config/kernel.m41
-rw-r--r--include/linux/vfs_compat.h14
-rw-r--r--include/sys/trace_acl.h6
-rw-r--r--module/zfs/zpl_super.c2
5 files changed, 37 insertions, 5 deletions
diff --git a/config/kernel-inode-set-iversion.m4 b/config/kernel-inode-set-iversion.m4
new file mode 100644
index 000000000..9a7d7890e
--- /dev/null
+++ b/config/kernel-inode-set-iversion.m4
@@ -0,0 +1,19 @@
+dnl #
+dnl # 4.16 API change
+dnl # inode_set_iversion introduced to set i_version
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_INODE_SET_IVERSION], [
+ AC_MSG_CHECKING([whether inode_set_iversion() exists])
+ ZFS_LINUX_TRY_COMPILE([
+ #include <linux/iversion.h>
+ ],[
+ struct inode inode;
+ inode_set_iversion(&inode, 1);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_INODE_SET_IVERSION, 1,
+ [inode_set_iversion() exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
diff --git a/config/kernel.m4 b/config/kernel.m4
index f8d81cdc0..805ec60a1 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -65,6 +65,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL
ZFS_AC_KERNEL_INODE_OPERATIONS_GETATTR
ZFS_AC_KERNEL_INODE_SET_FLAGS
+ ZFS_AC_KERNEL_INODE_SET_IVERSION
ZFS_AC_KERNEL_GET_ACL_HANDLE_CACHE
ZFS_AC_KERNEL_SHOW_OPTIONS
ZFS_AC_KERNEL_FILE_INODE
diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h
index 6111f0afc..f51ff887d 100644
--- a/include/linux/vfs_compat.h
+++ b/include/linux/vfs_compat.h
@@ -578,4 +578,18 @@ current_time(struct inode *ip)
}
#endif
+/*
+ * 4.16 API change
+ * Added iversion interface for managing inode version field.
+ */
+#ifdef HAVE_INODE_SET_IVERSION
+#include <linux/iversion.h>
+#else
+static inline void
+inode_set_iversion(struct inode *ip, u64 val)
+{
+ ip->i_version = val;
+}
+#endif
+
#endif /* _ZFS_VFS_H */
diff --git a/include/sys/trace_acl.h b/include/sys/trace_acl.h
index 1057e560b..610bbe29c 100644
--- a/include/sys/trace_acl.h
+++ b/include/sys/trace_acl.h
@@ -68,7 +68,6 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
__field(uint32_t, i_gid)
__field(unsigned long, i_ino)
__field(unsigned int, i_nlink)
- __field(u64, i_version)
__field(loff_t, i_size)
__field(unsigned int, i_blkbits)
__field(unsigned short, i_bytes)
@@ -103,7 +102,6 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
__entry->i_gid = KGID_TO_SGID(ZTOI(zn)->i_gid);
__entry->i_ino = zn->z_inode.i_ino;
__entry->i_nlink = zn->z_inode.i_nlink;
- __entry->i_version = zn->z_inode.i_version;
__entry->i_size = zn->z_inode.i_size;
__entry->i_blkbits = zn->z_inode.i_blkbits;
__entry->i_bytes = zn->z_inode.i_bytes;
@@ -121,7 +119,7 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
"mapcnt %llu size %llu pflags %llu "
"sync_cnt %u mode 0x%x is_sa %d "
"is_mapped %d is_ctldir %d is_stale %d inode { "
- "uid %u gid %u ino %lu nlink %u version %llu size %lli "
+ "uid %u gid %u ino %lu nlink %u size %lli "
"blkbits %u bytes %u mode 0x%x generation %x } } "
"ace { type %u flags %u access_mask %u } mask_matched %u",
__entry->z_id, __entry->z_unlinked, __entry->z_atime_dirty,
@@ -131,7 +129,7 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
__entry->z_is_sa, __entry->z_is_mapped,
__entry->z_is_ctldir, __entry->z_is_stale, __entry->i_uid,
__entry->i_gid, __entry->i_ino, __entry->i_nlink,
- __entry->i_version, __entry->i_size, __entry->i_blkbits,
+ __entry->i_size, __entry->i_blkbits,
__entry->i_bytes, __entry->i_mode, __entry->i_generation,
__entry->z_type, __entry->z_flags, __entry->z_access_mask,
__entry->mask_matched)
diff --git a/module/zfs/zpl_super.c b/module/zfs/zpl_super.c
index b6ef60277..25e75a897 100644
--- a/module/zfs/zpl_super.c
+++ b/module/zfs/zpl_super.c
@@ -36,7 +36,7 @@ zpl_inode_alloc(struct super_block *sb)
struct inode *ip;
VERIFY3S(zfs_inode_alloc(sb, &ip), ==, 0);
- ip->i_version = 1;
+ inode_set_iversion(ip, 1);
return (ip);
}