Linux 4.16 compat: inode_set_iversion()
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
This commit is contained in:
parent
a196b3bc3d
commit
310e63dfd1
|
@ -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)
|
||||||
|
])
|
||||||
|
])
|
|
@ -65,6 +65,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
|
||||||
ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL
|
ZFS_AC_KERNEL_INODE_OPERATIONS_SET_ACL
|
||||||
ZFS_AC_KERNEL_INODE_OPERATIONS_GETATTR
|
ZFS_AC_KERNEL_INODE_OPERATIONS_GETATTR
|
||||||
ZFS_AC_KERNEL_INODE_SET_FLAGS
|
ZFS_AC_KERNEL_INODE_SET_FLAGS
|
||||||
|
ZFS_AC_KERNEL_INODE_SET_IVERSION
|
||||||
ZFS_AC_KERNEL_GET_ACL_HANDLE_CACHE
|
ZFS_AC_KERNEL_GET_ACL_HANDLE_CACHE
|
||||||
ZFS_AC_KERNEL_SHOW_OPTIONS
|
ZFS_AC_KERNEL_SHOW_OPTIONS
|
||||||
ZFS_AC_KERNEL_FILE_INODE
|
ZFS_AC_KERNEL_FILE_INODE
|
||||||
|
|
|
@ -578,4 +578,18 @@ current_time(struct inode *ip)
|
||||||
}
|
}
|
||||||
#endif
|
#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 */
|
#endif /* _ZFS_VFS_H */
|
||||||
|
|
|
@ -68,7 +68,6 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
|
||||||
__field(uint32_t, i_gid)
|
__field(uint32_t, i_gid)
|
||||||
__field(unsigned long, i_ino)
|
__field(unsigned long, i_ino)
|
||||||
__field(unsigned int, i_nlink)
|
__field(unsigned int, i_nlink)
|
||||||
__field(u64, i_version)
|
|
||||||
__field(loff_t, i_size)
|
__field(loff_t, i_size)
|
||||||
__field(unsigned int, i_blkbits)
|
__field(unsigned int, i_blkbits)
|
||||||
__field(unsigned short, i_bytes)
|
__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_gid = KGID_TO_SGID(ZTOI(zn)->i_gid);
|
||||||
__entry->i_ino = zn->z_inode.i_ino;
|
__entry->i_ino = zn->z_inode.i_ino;
|
||||||
__entry->i_nlink = zn->z_inode.i_nlink;
|
__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_size = zn->z_inode.i_size;
|
||||||
__entry->i_blkbits = zn->z_inode.i_blkbits;
|
__entry->i_blkbits = zn->z_inode.i_blkbits;
|
||||||
__entry->i_bytes = zn->z_inode.i_bytes;
|
__entry->i_bytes = zn->z_inode.i_bytes;
|
||||||
|
@ -121,7 +119,7 @@ DECLARE_EVENT_CLASS(zfs_ace_class,
|
||||||
"mapcnt %llu size %llu pflags %llu "
|
"mapcnt %llu size %llu pflags %llu "
|
||||||
"sync_cnt %u mode 0x%x is_sa %d "
|
"sync_cnt %u mode 0x%x is_sa %d "
|
||||||
"is_mapped %d is_ctldir %d is_stale %d inode { "
|
"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 } } "
|
"blkbits %u bytes %u mode 0x%x generation %x } } "
|
||||||
"ace { type %u flags %u access_mask %u } mask_matched %u",
|
"ace { type %u flags %u access_mask %u } mask_matched %u",
|
||||||
__entry->z_id, __entry->z_unlinked, __entry->z_atime_dirty,
|
__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_sa, __entry->z_is_mapped,
|
||||||
__entry->z_is_ctldir, __entry->z_is_stale, __entry->i_uid,
|
__entry->z_is_ctldir, __entry->z_is_stale, __entry->i_uid,
|
||||||
__entry->i_gid, __entry->i_ino, __entry->i_nlink,
|
__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->i_bytes, __entry->i_mode, __entry->i_generation,
|
||||||
__entry->z_type, __entry->z_flags, __entry->z_access_mask,
|
__entry->z_type, __entry->z_flags, __entry->z_access_mask,
|
||||||
__entry->mask_matched)
|
__entry->mask_matched)
|
||||||
|
|
|
@ -36,7 +36,7 @@ zpl_inode_alloc(struct super_block *sb)
|
||||||
struct inode *ip;
|
struct inode *ip;
|
||||||
|
|
||||||
VERIFY3S(zfs_inode_alloc(sb, &ip), ==, 0);
|
VERIFY3S(zfs_inode_alloc(sb, &ip), ==, 0);
|
||||||
ip->i_version = 1;
|
inode_set_iversion(ip, 1);
|
||||||
|
|
||||||
return (ip);
|
return (ip);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue