Improve HAVE_EVICT_INODE check
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 5 Aug 2011 23:55:04 +0000 (16:55 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 8 Aug 2011 23:42:09 +0000 (16:42 -0700)
The hardened gentoo kernel defines all of the super block
operation callbacks as const.  This prevents the autoconf test
from assigning the callback and results in a false negative.
By moving the assignment in to the declaration we can avoid
this issue and get a correct result for this patched kernel.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #296

config/kernel-evict-inode.m4
configure

index f748898..0700792 100644 (file)
@@ -9,9 +9,9 @@ AC_DEFUN([ZFS_AC_KERNEL_EVICT_INODE], [
                #include <linux/fs.h>
        ],[
                void (*evict_inode) (struct inode *) = NULL;
-               struct super_operations sops __attribute__ ((unused));
-
-               sops.evict_inode = evict_inode;
+               struct super_operations sops __attribute__ ((unused)) = {
+                       .evict_inode = evict_inode,
+               };
        ],[
                AC_MSG_RESULT(yes)
                AC_DEFINE(HAVE_EVICT_INODE, 1, [sops->evict_inode() exists])
index 3b136d7..8640242 100755 (executable)
--- a/configure
+++ b/configure
@@ -14375,9 +14375,9 @@ main (void)
 {
 
                void (*evict_inode) (struct inode *) = NULL;
-               struct super_operations sops __attribute__ ((unused));
-
-               sops.evict_inode = evict_inode;
+               struct super_operations sops __attribute__ ((unused)) = {
+                       .evict_inode = evict_inode,
+               };
 
   ;
   return 0;
@@ -18733,9 +18733,9 @@ main (void)
 {
 
                void (*evict_inode) (struct inode *) = NULL;
-               struct super_operations sops __attribute__ ((unused));
-
-               sops.evict_inode = evict_inode;
+               struct super_operations sops __attribute__ ((unused)) = {
+                       .evict_inode = evict_inode,
+               };
 
   ;
   return 0;