diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/kernel-evict-inode.m4 | 6 | ||||
-rw-r--r-- | config/kernel-fallocate.m4 | 21 | ||||
-rw-r--r-- | config/kernel-fsync.m4 | 62 |
3 files changed, 85 insertions, 4 deletions
diff --git a/config/kernel-evict-inode.m4 b/config/kernel-evict-inode.m4 index 0700792f9..683cedb6d 100644 --- a/config/kernel-evict-inode.m4 +++ b/config/kernel-evict-inode.m4 @@ -7,12 +7,12 @@ AC_DEFUN([ZFS_AC_KERNEL_EVICT_INODE], [ AC_MSG_CHECKING([whether sops->evict_inode() exists]) ZFS_LINUX_TRY_COMPILE([ #include <linux/fs.h> - ],[ - void (*evict_inode) (struct inode *) = NULL; - struct super_operations sops __attribute__ ((unused)) = { + void evict_inode (struct inode * t) { return; } + static struct super_operations sops __attribute__ ((unused)) = { .evict_inode = evict_inode, }; ],[ + ],[ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_EVICT_INODE, 1, [sops->evict_inode() exists]) ],[ diff --git a/config/kernel-fallocate.m4 b/config/kernel-fallocate.m4 index d551276c7..6ac5ae65c 100644 --- a/config/kernel-fallocate.m4 +++ b/config/kernel-fallocate.m4 @@ -39,10 +39,31 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_FALLOCATE], [ ]) dnl # +dnl # PaX Linux 2.6.38 - 3.x API +dnl # +AC_DEFUN([ZFS_AC_PAX_KERNEL_FILE_FALLOCATE], [ + AC_MSG_CHECKING([whether fops->fallocate() exists]) + ZFS_LINUX_TRY_COMPILE([ + #include <linux/fs.h> + ],[ + long (*fallocate) (struct file *, int, loff_t, loff_t) = NULL; + struct file_operations_no_const fops __attribute__ ((unused)) = { + .fallocate = fallocate, + }; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists]) + ],[ + AC_MSG_RESULT(no) + ]) +]) + +dnl # dnl # The fallocate callback was moved from the inode_operations dnl # structure to the file_operations structure. dnl # AC_DEFUN([ZFS_AC_KERNEL_FALLOCATE], [ ZFS_AC_KERNEL_FILE_FALLOCATE ZFS_AC_KERNEL_INODE_FALLOCATE + ZFS_AC_PAX_KERNEL_FILE_FALLOCATE ]) diff --git a/config/kernel-fsync.m4 b/config/kernel-fsync.m4 index 862b89782..ca00d93be 100644 --- a/config/kernel-fsync.m4 +++ b/config/kernel-fsync.m4 @@ -37,7 +37,7 @@ AC_DEFUN([ZFS_AC_KERNEL_FSYNC_WITHOUT_DENTRY], [ ]) dnl # -dnl # Linux 3.1 -x 3.x API +dnl # Linux 3.1 - 3.x API dnl # AC_DEFUN([ZFS_AC_KERNEL_FSYNC_RANGE], [ ZFS_LINUX_TRY_COMPILE([ @@ -55,9 +55,69 @@ AC_DEFUN([ZFS_AC_KERNEL_FSYNC_RANGE], [ ]) ]) +dnl # +dnl # PaX Linux 2.6.x - 2.6.34 API +dnl # +AC_DEFUN([ZFS_AC_PAX_KERNEL_FSYNC_WITH_DENTRY], [ + ZFS_LINUX_TRY_COMPILE([ + #include <linux/fs.h> + ],[ + int (*fsync) (struct file *, struct dentry *, int) = NULL; + file_operations_no_const fops __attribute__ ((unused)); + + fops.fsync = fsync; + ],[ + AC_MSG_RESULT([dentry]) + AC_DEFINE(HAVE_FSYNC_WITH_DENTRY, 1, + [fops->fsync() with dentry]) + ],[ + ]) +]) + +dnl # +dnl # PaX Linux 2.6.35 - Linux 3.0 API +dnl # +AC_DEFUN([ZFS_AC_PAX_KERNEL_FSYNC_WITHOUT_DENTRY], [ + ZFS_LINUX_TRY_COMPILE([ + #include <linux/fs.h> + ],[ + int (*fsync) (struct file *, int) = NULL; + file_operations_no_const fops __attribute__ ((unused)); + + fops.fsync = fsync; + ],[ + AC_MSG_RESULT([no dentry]) + AC_DEFINE(HAVE_FSYNC_WITHOUT_DENTRY, 1, + [fops->fsync() without dentry]) + ],[ + ]) +]) + +dnl # +dnl # PaX Linux 3.1 - 3.x API +dnl # +AC_DEFUN([ZFS_AC_PAX_KERNEL_FSYNC_RANGE], [ + ZFS_LINUX_TRY_COMPILE([ + #include <linux/fs.h> + ],[ + int (*fsync) (struct file *, loff_t, loff_t, int) = NULL; + file_operations_no_const fops __attribute__ ((unused)); + + fops.fsync = fsync; + ],[ + AC_MSG_RESULT([range]) + AC_DEFINE(HAVE_FSYNC_RANGE, 1, + [fops->fsync() with range]) + ],[ + ]) +]) + AC_DEFUN([ZFS_AC_KERNEL_FSYNC], [ AC_MSG_CHECKING([whether fops->fsync() wants]) ZFS_AC_KERNEL_FSYNC_WITH_DENTRY ZFS_AC_KERNEL_FSYNC_WITHOUT_DENTRY ZFS_AC_KERNEL_FSYNC_RANGE + ZFS_AC_PAX_KERNEL_FSYNC_WITH_DENTRY + ZFS_AC_PAX_KERNEL_FSYNC_WITHOUT_DENTRY + ZFS_AC_PAX_KERNEL_FSYNC_RANGE ]) |