From 95f5c63b47d8f8294b38843f9ba710e97b749b63 Mon Sep 17 00:00:00 2001 From: Richard Yao Date: Thu, 16 Aug 2012 19:31:54 -0400 Subject: [PATCH] Linux 3.6 compat, iops->mkdir() 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 Signed-off-by: Brian Behlendorf Issue #873 --- ...{kernel-create-umode-t.m4 => kernel-mkdir-umode-t.m4} | 9 ++++----- config/kernel.m4 | 2 +- include/linux/vfs_compat.h | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) rename config/{kernel-create-umode-t.m4 => kernel-mkdir-umode-t.m4} (77%) diff --git a/config/kernel-create-umode-t.m4 b/config/kernel-mkdir-umode-t.m4 similarity index 77% rename from config/kernel-create-umode-t.m4 rename to config/kernel-mkdir-umode-t.m4 index f88113f40..dd5d94ba9 100644 --- a/config/kernel-create-umode-t.m4 +++ b/config/kernel-mkdir-umode-t.m4 @@ -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 ],[ - 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) diff --git a/config/kernel.m4 b/config/kernel.m4 index dd01fb28b..13238d8ac 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -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 diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h index 7181625df..c4e1771ae 100644 --- a/include/linux/vfs_compat.h +++ b/include/linux/vfs_compat.h @@ -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;