From ddd052aa8311f846e3d3f7a9ddf1a21d317fb04a Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Fri, 5 Aug 2011 16:55:04 -0700 Subject: [PATCH] Improve HAVE_EVICT_INODE check 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 Closes #296 --- config/kernel-evict-inode.m4 | 6 +++--- configure | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/config/kernel-evict-inode.m4 b/config/kernel-evict-inode.m4 index f748898..0700792 100644 --- a/config/kernel-evict-inode.m4 +++ b/config/kernel-evict-inode.m4 @@ -9,9 +9,9 @@ AC_DEFUN([ZFS_AC_KERNEL_EVICT_INODE], [ #include ],[ 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]) diff --git a/configure b/configure index 3b136d7..8640242 100755 --- 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; -- 1.8.3.1