75b07eca3e
by importing the upstream release as patches. replace user namespace patch with version which has been applied usptream.
146 lines
5.0 KiB
Diff
146 lines
5.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Brian Behlendorf <behlendorf1@llnl.gov>
|
|
Date: Thu, 8 Feb 2018 14:27:59 -0800
|
|
Subject: [PATCH] Linux 4.16 compat: inode_set_iversion()
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
A new interface was added to manipulate the version field of an
|
|
inode. Add a inode_set_iversion() wrapper for older kernels and
|
|
use the new interface when available.
|
|
|
|
The i_version field was dropped from the trace point due to the
|
|
switch to an atomic64_t i_version type.
|
|
|
|
Reviewed-by: Olaf Faaland <faaland1@llnl.gov>
|
|
Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
|
|
Reviewed-by: Chunwei Chen <david.chen@nutanix.com>
|
|
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
|
|
Closes #7148
|
|
(cherry picked from commit 310e63dfd18f59ad583631dfa2f55d40cedf1415)
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
include/linux/vfs_compat.h | 14 ++++++++++++++
|
|
include/sys/trace_acl.h | 6 ++----
|
|
module/zfs/zpl_super.c | 2 +-
|
|
config/kernel-inode-set-iversion.m4 | 19 +++++++++++++++++++
|
|
config/kernel.m4 | 1 +
|
|
5 files changed, 37 insertions(+), 5 deletions(-)
|
|
create mode 100644 config/kernel-inode-set-iversion.m4
|
|
|
|
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);
|
|
}
|
|
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 b759ccd39..b83f021e8 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
|
|
--
|
|
2.14.2
|
|
|