Eliminate runtime function pointer mods in autotools checks
[zfs.git] / config / kernel-fallocate.m4
index 6ac5ae6..5509064 100644 (file)
@@ -5,12 +5,16 @@ AC_DEFUN([ZFS_AC_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 fops __attribute__ ((unused)) = {
-                       .fallocate = fallocate,
+
+               long test_fallocate(struct file *file, int mode,
+                   loff_t offset, loff_t len) { return 0; }
+
+               static const struct file_operations
+                   fops __attribute__ ((unused)) = {
+                       .fallocate = test_fallocate,
                };
        ],[
+       ],[
                AC_MSG_RESULT(yes)
                AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
        ],[
@@ -25,34 +29,18 @@ AC_DEFUN([ZFS_AC_KERNEL_INODE_FALLOCATE], [
        AC_MSG_CHECKING([whether iops->fallocate() exists])
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/fs.h>
-       ],[
-               long (*fallocate) (struct inode *, int, loff_t, loff_t) = NULL;
-               struct inode_operations fops __attribute__ ((unused)) = {
-                       .fallocate = fallocate,
-               };
-       ],[
-               AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists])
-       ],[
-               AC_MSG_RESULT(no)
-       ])
-])
 
-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,
+               long test_fallocate(struct inode *inode, int mode,
+                   loff_t offset, loff_t len) { return 0; }
+
+               static const struct inode_operations
+                   fops __attribute__ ((unused)) = {
+                       .fallocate = test_fallocate,
                };
        ],[
+       ],[
                AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_FILE_FALLOCATE, 1, [fops->fallocate() exists])
+               AC_DEFINE(HAVE_INODE_FALLOCATE, 1, [fops->fallocate() exists])
        ],[
                AC_MSG_RESULT(no)
        ])
@@ -65,5 +53,4 @@ dnl #
 AC_DEFUN([ZFS_AC_KERNEL_FALLOCATE], [
        ZFS_AC_KERNEL_FILE_FALLOCATE
        ZFS_AC_KERNEL_INODE_FALLOCATE
-       ZFS_AC_PAX_KERNEL_FILE_FALLOCATE
 ])