From 534759fad30ca55608bcd42a0af5a87c8c4feb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Sat, 7 Feb 2015 13:41:01 +0100 Subject: [PATCH] Linux 3.19 compat: file_inode was added struct access f->f_dentry->d_inode was replaced by accessor function file_inode(f) Signed-off-by: Joerg Thalheim Signed-off-by: Brian Behlendorf Closes #3084 --- config/kernel-file-inode.m4 | 19 +++++++++++++++++++ config/kernel.m4 | 1 + include/linux/vfs_compat.h | 13 +++++++++++++ module/zfs/zpl_file.c | 4 ++-- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 config/kernel-file-inode.m4 diff --git a/config/kernel-file-inode.m4 b/config/kernel-file-inode.m4 new file mode 100644 index 000000000..300188fa3 --- /dev/null +++ b/config/kernel-file-inode.m4 @@ -0,0 +1,19 @@ +dnl # +dnl # 3.19 API change +dnl # struct access f->f_dentry->d_inode was replaced by accessor function +dnl # file_inode(f) +dnl # +AC_DEFUN([ZFS_AC_KERNEL_FILE_INODE], [ + AC_MSG_CHECKING([whether file_inode() is available]) + ZFS_LINUX_TRY_COMPILE([ + #include + ],[ + struct file *f = NULL; + file_inode(f); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_INODE, 1, [file_inode() is available]) + ],[ + AC_MSG_RESULT(no) + ]) +]) diff --git a/config/kernel.m4 b/config/kernel.m4 index bdfb19c83..e0b795422 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -61,6 +61,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ ZFS_AC_KERNEL_INODE_OPERATIONS_GET_ACL ZFS_AC_KERNEL_CURRENT_UMASK ZFS_AC_KERNEL_SHOW_OPTIONS + ZFS_AC_KERNEL_FILE_INODE ZFS_AC_KERNEL_FSYNC ZFS_AC_KERNEL_EVICT_INODE ZFS_AC_KERNEL_DIRTY_INODE_WITH_FLAGS diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h index 098cf05f3..6f5a9dc96 100644 --- a/include/linux/vfs_compat.h +++ b/include/linux/vfs_compat.h @@ -21,6 +21,7 @@ /* * Copyright (C) 2011 Lawrence Livermore National Security, LLC. + * Copyright (C) 2015 Jörg Thalheim. */ #ifndef _ZFS_VFS_H @@ -328,4 +329,16 @@ current_umask(void) #define zpl_inode_owner_or_capable(ip) is_owner_or_cap(ip) #endif /* HAVE_INODE_OWNER_OR_CAPABLE */ +/* + * 3.19 API change + * struct access f->f_dentry->d_inode was replaced by accessor function + * file_inode(f) + */ +#ifndef HAVE_FILE_INODE +static inline struct inode *file_inode(const struct file *f) +{ + return (f->f_dentry->d_inode); +} +#endif /* HAVE_FILE_INODE */ + #endif /* _ZFS_VFS_H */ diff --git a/module/zfs/zpl_file.c b/module/zfs/zpl_file.c index 1f4f219ed..5f5bbba3d 100644 --- a/module/zfs/zpl_file.c +++ b/module/zfs/zpl_file.c @@ -617,7 +617,7 @@ zpl_fallocate(struct file *filp, int mode, loff_t offset, loff_t len) static int zpl_ioctl_getflags(struct file *filp, void __user *arg) { - struct inode *ip = filp->f_dentry->d_inode; + struct inode *ip = file_inode(filp); unsigned int ioctl_flags = 0; uint64_t zfs_flags = ITOZ(ip)->z_pflags; int error; @@ -653,7 +653,7 @@ zpl_ioctl_getflags(struct file *filp, void __user *arg) static int zpl_ioctl_setflags(struct file *filp, void __user *arg) { - struct inode *ip = filp->f_dentry->d_inode; + struct inode *ip = file_inode(filp); uint64_t zfs_flags = ITOZ(ip)->z_pflags; unsigned int ioctl_flags; cred_t *cr = CRED();