Linux 3.6 compat, iops->mkdir()
authorRichard Yao <ryao@cs.stonybrook.edu>
Thu, 16 Aug 2012 23:31:54 +0000 (19:31 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Sun, 14 Oct 2012 22:29:26 +0000 (15:29 -0700)
Use .mkdir instead of .create in 3.3 compatibility check.  Linux 3.6
modifies inode_operations->create's function prototype. This causes
an autotools Linux 3.3. compatibility check for a function prototype
change in create, mkdir and mknode to fail. Since mkdir and mknode
are unchanged, we modify the check to examine it instead.

Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #873

config/kernel-mkdir-umode-t.m4 [moved from config/kernel-create-umode-t.m4 with 77% similarity]
config/kernel.m4
include/linux/vfs_compat.h

similarity index 77%
rename from config/kernel-create-umode-t.m4
rename to config/kernel-mkdir-umode-t.m4
index f88113f..dd5d94b 100644 (file)
@@ -6,19 +6,18 @@ dnl # would also change all three prototypes.  However, if it turns out that
 dnl # some distribution doesn't backport the whole thing this could be
 dnl # broken apart in to three seperate checks.
 dnl #
-AC_DEFUN([ZFS_AC_KERNEL_CREATE_UMODE_T], [
+AC_DEFUN([ZFS_AC_KERNEL_MKDIR_UMODE_T], [
        AC_MSG_CHECKING([whether iops->create()/mkdir()/mknod() take umode_t])
        ZFS_LINUX_TRY_COMPILE([
                #include <linux/fs.h>
        ],[
-               int (*create) (struct inode *, struct dentry *, umode_t,
-                   struct nameidata *) = NULL;
+               int (*mkdir) (struct inode *,struct dentry *,umode_t) = NULL;
                struct inode_operations iops __attribute__ ((unused)) = {
-                       .create = create,
+                       .mkdir = mkdir,
                };
        ],[
                AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_CREATE_UMODE_T, 1,
+               AC_DEFINE(HAVE_MKDIR_UMODE_T, 1,
                    [iops->create()/mkdir()/mknod() take umode_t])
        ],[
                AC_MSG_RESULT(no)
index dd01fb2..13238d8 100644 (file)
@@ -49,10 +49,10 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_NR_CACHED_OBJECTS
        ZFS_AC_KERNEL_FREE_CACHED_OBJECTS
        ZFS_AC_KERNEL_FALLOCATE
+       ZFS_AC_KERNEL_MKDIR_UMODE_T
        ZFS_AC_KERNEL_LOOKUP_NAMEIDATA
        ZFS_AC_KERNEL_CREATE_NAMEIDATA
        ZFS_AC_KERNEL_TRUNCATE_RANGE
-       ZFS_AC_KERNEL_CREATE_UMODE_T
        ZFS_AC_KERNEL_AUTOMOUNT
        ZFS_AC_KERNEL_ENCODE_FH_WITH_INODE
        ZFS_AC_KERNEL_COMMIT_METADATA
index 7181625..c4e1771 100644 (file)
@@ -115,7 +115,7 @@ set_nlink(struct inode *inode, unsigned int nlink)
  * umode_t type rather than an int.  To cleanly handle both definitions
  * the zpl_umode_t type is introduced and set accordingly.
  */
-#ifdef HAVE_CREATE_UMODE_T
+#ifdef HAVE_MKDIR_UMODE_T
 typedef        umode_t         zpl_umode_t;
 #else
 typedef        int             zpl_umode_t;