Linux: Fix build with CONFIG_UIDGID_STRICT_TYPE_CHECKS (user namespaces)
[openafs.git] / src / cf / linux-test4.m4
index a99becb..68ad2d6 100644 (file)
@@ -1,3 +1,17 @@
+
+AC_DEFUN([LINUX_AIO_NONVECTOR],
+ [AC_CHECK_LINUX_BUILD([for non-vectorized aio kernel functions],
+                       [ac_cv_linux_aio_nonvector],
+                       [#include <linux/fs.h>],
+                       [extern ssize_t
+                        generic_file_aio_read(struct kiocb *, char __user *,
+                                              size_t, loff_t);],
+                       [LINUX_HAS_NONVECTOR_AIO],
+                       [define if kernel functions like generic_file_aio_read use
+                        non-vectorized i/o],
+                       [])
+ ])
+
 AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [
   AC_CHECK_LINUX_BUILD([for exported tasklist_lock],
                       [ac_cv_linux_exports_tasklist_lock],
@@ -339,7 +353,8 @@ AC_DEFUN([LINUX_KEY_ALLOC_NEEDS_STRUCT_TASK], [
                        [#include <linux/rwsem.h>
                        #include <linux/key.h> ],
                        [struct task_struct *t=NULL;
-                       (void) key_alloc(NULL, NULL, 0, 0, t, 0, 0);],
+                       struct key k = {};
+                       (void) key_alloc(NULL, NULL, k.uid, k.gid, t, 0, 0);],
                        [KEY_ALLOC_NEEDS_STRUCT_TASK],
                        [define if key_alloc takes a struct task *],
                        [-Werror -Wno-pointer-arith])
@@ -352,13 +367,26 @@ AC_DEFUN([LINUX_KEY_ALLOC_NEEDS_CRED], [
                        [#include <linux/rwsem.h>
                        #include <linux/key.h>],
                        [struct cred *c = NULL;
-                       (void) key_alloc(NULL, NULL, 0, 0, c, 0, 0);],
+                       struct key k = {};
+                       (void) key_alloc(NULL, NULL, k.uid, k.gid, c, 0, 0);],
                        [KEY_ALLOC_NEEDS_CRED],
                        [define if key_alloc takes credentials],
                        [-Werror -Wno-pointer-arith])
 ])
 
 
+AC_DEFUN([LINUX_STRUCT_KEY_UID_IS_KUID_T], [
+  AC_CHECK_LINUX_BUILD([if struct key.uid is kuid_t],
+                       [ac_cv_struct_key_uid_is_kuid_t],
+                       [#include <linux/rwsem.h>
+                       #include <linux/key.h>],
+                       [struct key k = {};
+                       kuid_t *kuid = &k.uid;],
+                       [STRUCT_KEY_UID_IS_KUID_T],
+                       [define if struct key.uid is kuid_t])
+])
+
+
 AC_DEFUN([LINUX_INIT_WORK_HAS_DATA], [
   AC_CHECK_LINUX_BUILD([whether INIT_WORK has a _data argument],
                       [ac_cv_linux_init_work_has_data],
@@ -704,6 +732,21 @@ AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [
 ])
 
 
+AC_DEFUN([LINUX_HLIST_ITERATOR_NO_NODE], [
+  AC_CHECK_LINUX_BUILD([whether hlist iterators don't need a node parameter],
+                       [ac_cv_linux_hlist_takes_no_node],
+                       [#include <linux/list.h>
+                       #include <linux/fs.h>],
+                       [struct dentry *d = NULL, *cur;
+                       struct inode *ip;
+                       hlist_for_each_entry(cur, &ip->i_dentry, d_alias) { }
+                       ],
+                       [HLIST_ITERATOR_NO_NODE],
+                       [define if hlist iterators don't need a node parameter],
+                       [])
+])
+
+
 AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [
   AC_CHECK_LINUX_BUILD([whether inode_operations.create takes a bool],
                        [ac_cv_linux_func_i_create_takes_bool],
@@ -731,3 +774,17 @@ AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED], [
                       [define if your dops.d_revalidate takes an unsigned int argument],
                       [-Werror])
 ])
+
+
+AC_DEFUN([LINUX_IOP_LOOKUP_TAKES_UNSIGNED], [
+  AC_CHECK_LINUX_BUILD([whether inode operation lookup takes an unsigned int],
+                       [ac_cv_linux_func_lookup_takes_unsigned],
+                       [#include <linux/fs.h>
+                       #include <linux/namei.h>],
+                       [struct inode_operations iops;
+                       struct dentry *look(struct inode *i, struct dentry *d, unsigned int j) { return NULL; };
+                       iops.lookup = look;],
+                      [IOP_LOOKUP_TAKES_UNSIGNED],
+                      [define if your iops.lookup takes an unsigned int argument],
+                      [-Werror])
+])