From: Richard Yao Date: Thu, 16 Aug 2012 23:31:54 +0000 (-0400) Subject: Linux 3.6 compat, iops->mkdir() X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=commitdiff_plain;h=95f5c63b47d8f8294b38843f9ba710e97b749b63;p=zfs.git 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 --- 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 f88113f..dd5d94b 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 dd01fb2..13238d8 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 7181625..c4e1771 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;