summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2012-04-30 12:01:49 -0700
committerBrian Behlendorf <[email protected]>2012-04-30 12:52:38 -0700
commitb39d3b9f7be925ba9314c336099f31f508e1d940 (patch)
tree5bc9d2f44becaef2b6e1d6d5114a6bc21f6302e2 /config
parentce90208cf9e04df966429f115d8831371ea9afce (diff)
Linux 3.3 compat, iops->create()/mkdir()/mknod()
The mode argument of iops->create()/mkdir()/mknod() was changed from an 'int' to a 'umode_t'. To prevent a compiler warning an autoconf check was added to detect the API change and then correctly set a zpl_umode_t typedef. There is no functional change. Signed-off-by: Brian Behlendorf <[email protected]> Closes #701
Diffstat (limited to 'config')
-rw-r--r--config/kernel-create-umode-t.m426
-rw-r--r--config/kernel.m41
2 files changed, 27 insertions, 0 deletions
diff --git a/config/kernel-create-umode-t.m4 b/config/kernel-create-umode-t.m4
new file mode 100644
index 000000000..f88113f40
--- /dev/null
+++ b/config/kernel-create-umode-t.m4
@@ -0,0 +1,26 @@
+dnl #
+dnl # 3.3 API change
+dnl # The VFS .create, .mkdir and .mknod callbacks were updated to take a
+dnl # umode_t type rather than an int. The expectation is that any backport
+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_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;
+ struct inode_operations iops __attribute__ ((unused)) = {
+ .create = create,
+ };
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_CREATE_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 a6d544bb7..48e92ced4 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -45,6 +45,7 @@ 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_CREATE_UMODE_T
ZFS_AC_KERNEL_AUTOMOUNT
ZFS_AC_KERNEL_INSERT_INODE_LOCKED
ZFS_AC_KERNEL_D_OBTAIN_ALIAS