]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Kernel 4.9 compat: file_operations->aio_fsync removal
authorDeHackEd <DeHackEd@users.noreply.github.com>
Tue, 15 Nov 2016 17:20:46 +0000 (12:20 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 15 Nov 2016 17:20:46 +0000 (09:20 -0800)
Linux kernel commit 723c038475b78 removed this field.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: DHE <git@dehacked.net>
Closes #5393

config/kernel-aio-fsync.m4 [new file with mode: 0644]
config/kernel.m4
module/zfs/zpl_file.c

diff --git a/config/kernel-aio-fsync.m4 b/config/kernel-aio-fsync.m4
new file mode 100644 (file)
index 0000000..41b7a98
--- /dev/null
@@ -0,0 +1,21 @@
+dnl #
+dnl # Linux 4.9-rc5+ ABI, removal of the .aio_fsync field
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_AIO_FSYNC], [
+       AC_MSG_CHECKING([whether fops->aio_fsync() exists])
+       ZFS_LINUX_TRY_COMPILE([
+               #include <linux/fs.h>
+
+               static const struct file_operations
+                   fops __attribute__ ((unused)) = {
+                       .aio_fsync = NULL,
+               };
+       ],[
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_FILE_AIO_FSYNC, 1, [fops->aio_fsync() exists])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
+
index af5945140b99e2d7e5c7d7f912f28165c1cb5d64..b66631a9c9930ea4592d6b621d3cb365b14fa2d1 100644 (file)
@@ -66,6 +66,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_NR_CACHED_OBJECTS
        ZFS_AC_KERNEL_FREE_CACHED_OBJECTS
        ZFS_AC_KERNEL_FALLOCATE
+       ZFS_AC_KERNEL_AIO_FSYNC
        ZFS_AC_KERNEL_MKDIR_UMODE_T
        ZFS_AC_KERNEL_LOOKUP_NAMEIDATA
        ZFS_AC_KERNEL_CREATE_NAMEIDATA
index 2c84d700d6d1e636a633dcaf094dfe20906af92e..a225220285af2b1c454478bcb5e72d1da2556ad9 100644 (file)
@@ -130,12 +130,15 @@ zpl_fsync(struct file *filp, struct dentry *dentry, int datasync)
        return (error);
 }
 
+#ifdef HAVE_FILE_AIO_FSYNC
 static int
 zpl_aio_fsync(struct kiocb *kiocb, int datasync)
 {
        struct file *filp = kiocb->ki_filp;
        return (zpl_fsync(filp, file_dentry(filp), datasync));
 }
+#endif
+
 #elif defined(HAVE_FSYNC_WITHOUT_DENTRY)
 /*
  * Linux 2.6.35 - 3.0 API,
@@ -161,11 +164,14 @@ zpl_fsync(struct file *filp, int datasync)
        return (error);
 }
 
+#ifdef HAVE_FILE_AIO_FSYNC
 static int
 zpl_aio_fsync(struct kiocb *kiocb, int datasync)
 {
        return (zpl_fsync(kiocb->ki_filp, datasync));
 }
+#endif
+
 #elif defined(HAVE_FSYNC_RANGE)
 /*
  * Linux 3.1 - 3.x API,
@@ -196,11 +202,14 @@ zpl_fsync(struct file *filp, loff_t start, loff_t end, int datasync)
        return (error);
 }
 
+#ifdef HAVE_FILE_AIO_FSYNC
 static int
 zpl_aio_fsync(struct kiocb *kiocb, int datasync)
 {
        return (zpl_fsync(kiocb->ki_filp, kiocb->ki_pos, -1, datasync));
 }
+#endif
+
 #else
 #error "Unsupported fops->fsync() implementation"
 #endif
@@ -838,7 +847,9 @@ const struct file_operations zpl_file_operations = {
 #endif
        .mmap           = zpl_mmap,
        .fsync          = zpl_fsync,
+#ifdef HAVE_FILE_AIO_FSYNC
        .aio_fsync      = zpl_aio_fsync,
+#endif
 #ifdef HAVE_FILE_FALLOCATE
        .fallocate      = zpl_fallocate,
 #endif /* HAVE_FILE_FALLOCATE */