Fix snapshot automounting with GrSecurity constify plugin.
authorMassimo Maggi <massimo@mmmm.it>
Thu, 23 Aug 2012 12:52:45 +0000 (14:52 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 24 Aug 2012 15:56:38 +0000 (08:56 -0700)
./configure erroneously detects absence of dops->d_automount
when built against a GrSecurity patched kernel.

Summerized error message found in config.log:

  checking whether dops->d_automount() exists
  ...
  In function 'main': ... error: constified variable 'dops'
  cannot be local

The "dops" variable cannot be a local variable, so it's
moved to the global scope.

This test also fails if the prototype of the dops->d_automount
function pointer is changed.

Signed-off-by: Massimo Maggi <massimo@mmmm.it>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>
Closes #884

config/kernel-automount.m4
configure

index 972b09b..1ee4c16 100644 (file)
@@ -9,12 +9,12 @@ AC_DEFUN([ZFS_AC_KERNEL_AUTOMOUNT], [
        AC_MSG_CHECKING([whether dops->d_automount() exists])
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/dcache.h>
-       ],[
-               struct vfsmount *(*d_automount) (struct path *) = NULL;
+               struct vfsmount *d_automount(struct path *p) { return NULL; }
                struct dentry_operations dops __attribute__ ((unused)) = {
                        .d_automount = d_automount,
                };
        ],[
+       ],[
                AC_MSG_RESULT(yes)
                AC_DEFINE(HAVE_AUTOMOUNT, 1, [dops->automount() exists])
        ],[
index 23c90c2..83fc2a8 100755 (executable)
--- a/configure
+++ b/configure
@@ -16750,15 +16750,15 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 
                #include <linux/dcache.h>
+               struct vfsmount *d_automount(struct path *p) { return NULL; }
+               struct dentry_operations dops __attribute__ ((unused)) = {
+                       .d_automount = d_automount,
+               };
 
 int
 main (void)
 {
 
-               struct vfsmount *(*d_automount) (struct path *) = NULL;
-               struct dentry_operations dops __attribute__ ((unused)) = {
-                       .d_automount = d_automount,
-               };
 
   ;
   return 0;
@@ -24359,15 +24359,15 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 
                #include <linux/dcache.h>
+               struct vfsmount *d_automount(struct path *p) { return NULL; }
+               struct dentry_operations dops __attribute__ ((unused)) = {
+                       .d_automount = d_automount,
+               };
 
 int
 main (void)
 {
 
-               struct vfsmount *(*d_automount) (struct path *) = NULL;
-               struct dentry_operations dops __attribute__ ((unused)) = {
-                       .d_automount = d_automount,
-               };
 
   ;
   return 0;