2 AC_DEFUN([LINUX_AIO_NONVECTOR],
3 [AC_CHECK_LINUX_BUILD([for non-vectorized aio kernel functions],
4 [ac_cv_linux_aio_nonvector],
5 [#include <linux/fs.h>],
7 generic_file_aio_read(struct kiocb *, char __user *,
9 [LINUX_HAS_NONVECTOR_AIO],
10 [define if kernel functions like generic_file_aio_read use
15 AC_DEFUN([LINUX_EXPORTS_TASKLIST_LOCK], [
16 AC_CHECK_LINUX_BUILD([for exported tasklist_lock],
17 [ac_cv_linux_exports_tasklist_lock],
18 [#include <linux/sched.h>],
20 extern rwlock_t tasklist_lock __attribute__((weak));
21 read_lock(&tasklist_lock);
23 [EXPORTED_TASKLIST_LOCK],
24 [define if tasklist_lock exported],
28 AC_DEFUN([LINUX_COMPLETION_H_EXISTS], [
29 AC_CHECK_LINUX_BUILD([for linux/completion.h],
30 [ac_cv_linux_completion_h_exists],
31 [#include <linux/version.h>
32 #include <linux/completion.h>],
33 [struct completion _c;
34 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,8)
37 [HAVE_LINUX_COMPLETION_H]
38 [Define if your kernel has a usable linux/completion.h],
43 AC_DEFUN([LINUX_EXPORTS_INIT_MM], [
44 AC_CHECK_LINUX_BUILD([for exported init_mm],
45 [ac_cv_linux_exports_init_mm],
46 [extern struct mm_struct init_mm;],
47 [void *address = &init_mm; printk("%p\n", address);],
49 [define if your kernel exports init_mm],
54 AC_DEFUN([LINUX_EXPORTS_KALLSYMS_ADDRESS], [
55 AC_CHECK_LINUX_BUILD([for exported kallsyms_address_to_symbol],
56 [ac_cv_linux_exports_kallsyms_address],
57 [#include <linux/modversions.h>],
58 [#ifndef __ver_kallsyms_address_to_symbol
59 #error kallsyms_address_to_symbol not exported
61 [EXPORTED_KALLSYMS_ADDRESS],
62 [define if your linux kernel exports kallsyms address],
67 AC_DEFUN([LINUX_EXPORTS_KALLSYMS_SYMBOL], [
68 AC_CHECK_LINUX_BUILD([for exported kallsyms_symbol_to_address],
69 [ac_cv_linux_exports_kallsyms_symbol],
70 [#include <linux/modversions.h>],
71 [#ifndef __ver_kallsyms_symbol_to_address
72 #error kallsyms_symbol_to_address not exported
74 [EXPORTED_KALLSYMS_SYMBOL],
75 [define if your linux kernel exports kallsyms],
80 AC_DEFUN([LINUX_EXPORTS_SYS_CALL_TABLE], [
81 AC_CHECK_LINUX_BUILD([for exported sys_call_table],
82 [ac_cv_linux_exports_sys_call_table],
83 [#include <linux/modversions.h>],
84 [#ifndef __ver_sys_call_table
85 #error sys_call_table not exported
87 [EXPORTED_SYS_CALL_TABLE],
88 [define if your linux kernel exports sys_call_table],
93 AC_DEFUN([LINUX_EXPORTS_IA32_SYS_CALL_TABLE], [
94 AC_CHECK_LINUX_BUILD([for exported ia32_sys_call_table],
95 [ac_cv_linux_exports_ia32_sys_call_table],
96 [#include <linux/modversions.h>],
97 [#ifndef __ver_ia32_sys_call_table
98 #error ia32_sys_call_table not exported
100 [EXPORTED_IA32_SYS_CALL_TABLE],
101 [define if your linux kernel exports ia32_sys_call_table],
106 AC_DEFUN([LINUX_EXPORTS_SYS_CHDIR], [
107 AC_CHECK_LINUX_BUILD([for exported sys_chdir],
108 [ac_cv_linux_exports_sys_chdir],
109 [extern asmlinkage long sys_chdir(void) __attribute__((weak));],
110 [void *address = &sys_chdir; printk("%p\n", address);],
111 [EXPORTED_SYS_CHDIR],
112 [define if your linux kernel exports sys_chdir],
117 AC_DEFUN([LINUX_EXPORTS_SYS_OPEN], [
118 AC_CHECK_LINUX_BUILD([for exported sys_open],
119 [ac_cv_linux_exports_sys_open],
120 [extern asmlinkage long sys_open(void) __attribute__((weak));],
121 [void *address = &sys_open; printk("%p\n", address);],
123 [define if your linux kernel exports sys_open],
128 AC_DEFUN([LINUX_RECALC_SIGPENDING_ARG_TYPE], [
129 AC_CHECK_LINUX_BUILD([for recalc_sigpending arg type],
130 [ac_cv_linux_func_recalc_sigpending_takes_void],
131 [#include <linux/sched.h>],
132 [recalc_sigpending();],
133 [RECALC_SIGPENDING_TAKES_VOID],
134 [define if your recalc_sigpending takes void],
139 AC_DEFUN([LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGNAL_RLIM], [
140 AC_CHECK_LINUX_BUILD([for signal->rlim in struct task_struct],
141 [ac_cv_linux_sched_struct_task_struct_has_signal_rlim],
142 [#include <linux/sched.h>],
143 [struct task_struct _tsk; printk("%d\n", _tsk.signal->rlim);],
144 [STRUCT_TASK_STRUCT_HAS_SIGNAL_RLIM],
145 [define if your struct task_struct has signal->rlim],
150 AC_DEFUN([LINUX_KERNEL_POSIX_LOCK_FILE_WAIT_ARG], [
151 AC_CHECK_LINUX_BUILD([for 3rd argument in posix_lock_file found in new kernels],
152 [ac_cv_linux_kernel_posix_lock_file_wait_arg],
153 [#include <linux/fs.h>],
154 [posix_lock_file(0,0,0);],
155 [POSIX_LOCK_FILE_WAIT_ARG],
156 [define if your kernel uses 3 arguments for posix_lock_file],
160 AC_DEFUN([LINUX_KERNEL_SOCK_CREATE], [
161 AC_CHECK_LINUX_BUILD([for 5th argument in sock_create found in some SELinux kernels],
162 [ac_cv_linux_kernel_sock_create_v],
163 [#include <linux/net.h>],
164 [sock_create(0,0,0,0,0);],
165 [LINUX_KERNEL_SOCK_CREATE_V],
166 [define if your linux kernel uses 5 arguments for sock_create],
171 AC_DEFUN([LINUX_INODE_SETATTR_RETURN_TYPE], [
172 AC_CHECK_LINUX_BUILD([for inode_setattr return type],
173 [ac_cv_linux_func_inode_setattr_returns_int],
174 [#include <linux/fs.h>],
175 [struct inode _inode;
178 i = inode_setattr(&_inode, &_iattr);],
179 [INODE_SETATTR_NOT_VOID],
180 [define if your setattr return return non-void],
186 AC_DEFUN([LINUX_AOP_WRITEBACK_CONTROL], [
187 AC_CHECK_LINUX_BUILD([whether aop.writepage takes a writeback_control],
188 [ac_cv_linux_func_a_writepage_takes_writeback_control],
189 [#include <linux/fs.h>
190 #include <linux/mm.h>
191 #include <linux/writeback.h>],
192 [struct address_space_operations _aops;
194 struct writeback_control _writeback_control;
195 (void)_aops.writepage(&_page, &_writeback_control);],
196 [AOP_WRITEPAGE_TAKES_WRITEBACK_CONTROL],
197 [define if aops.writepage takes a struct writeback_control],
202 AC_DEFUN([LINUX_REFRIGERATOR], [
203 AC_CHECK_LINUX_BUILD([whether refrigerator takes PF_FREEZE],
204 [ac_cv_linux_func_refrigerator_takes_pf_freeze],
205 [#include <linux/sched.h>
206 #ifdef HAVE_LINUX_FREEZER_H
207 #include <linux/freezer.h>
209 [refrigerator(PF_FREEZE);],
210 [LINUX_REFRIGERATOR_TAKES_PF_FREEZE],
211 [define if your refrigerator takes PF_FREEZE],
216 AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_NAMEIDATA], [
217 AC_CHECK_LINUX_BUILD([whether inode_operations.create takes a nameidata],
218 [ac_cv_linux_func_i_create_takes_nameidata],
219 [#include <linux/fs.h>
220 #include <linux/namei.h>],
221 [struct inode _inode;
222 struct dentry _dentry;
223 struct nameidata _nameidata;
224 (void)_inode.i_op->create(&_inode, &_dentry, 0, &_nameidata);],
226 [IOP_CREATE_TAKES_NAMEIDATA],
227 [define if your iops.create takes a nameidata argument],
232 AC_DEFUN([LINUX_IOP_I_LOOKUP_TAKES_NAMEIDATA], [
233 AC_CHECK_LINUX_BUILD([whether inode_operations.lookup takes a nameidata],
234 [ac_cv_linux_func_i_lookup_takes_nameidata],
235 [#include <linux/fs.h>
236 #include <linux/namei.h>],
237 [struct inode _inode;
238 struct dentry _dentry;
239 struct nameidata _nameidata;
240 (void)_inode.i_op->lookup(&_inode, &_dentry, &_nameidata);],
241 [IOP_LOOKUP_TAKES_NAMEIDATA],
242 [define if your iops.lookup takes a nameidata argument],
247 AC_DEFUN([LINUX_IOP_I_PERMISSION_TAKES_NAMEIDATA], [
248 AC_CHECK_LINUX_BUILD([whether inode_operations.permission takes a nameidata],
249 [ac_cv_linux_func_i_permission_takes_nameidata],
250 [#include <linux/fs.h>
251 #include <linux/namei.h>],
252 [struct inode _inode;
253 struct nameidata _nameidata;
254 (void)_inode.i_op->permission(&_inode, 0, &_nameidata);],
255 [IOP_PERMISSION_TAKES_NAMEIDATA],
256 [define if your iops.permission takes a nameidata argument],
261 AC_DEFUN([LINUX_IOP_I_PERMISSION_TAKES_FLAGS], [
262 AC_CHECK_LINUX_BUILD([whether inode_operations.permission takes flags],
263 [ac_cv_linux_func_i_permission_takes_flags],
264 [#include <linux/fs.h>],
265 [struct inode _inode = {0};
266 unsigned int flags = 0;
267 (void)_inode.i_op->permission(&_inode, 0, flags);],
268 [IOP_PERMISSION_TAKES_FLAGS],
269 [define if your iops.permission takes a flags argument],
274 AC_DEFUN([LINUX_IOP_I_PUT_LINK_TAKES_COOKIE], [
275 AC_CHECK_LINUX_BUILD([whether inode_operations.put_link takes an opaque cookie],
276 [ac_cv_linux_func_i_put_link_takes_cookie],
277 [#include <linux/fs.h>
278 #include <linux/namei.h>],
279 [struct inode _inode;
280 struct dentry _dentry;
281 struct nameidata *_nameidata;
283 (void)_inode.i_op->put_link(&_dentry, _nameidata, cookie);],
284 [IOP_PUT_LINK_TAKES_COOKIE],
285 [define if your iops.put_link takes a cookie],
290 AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_NAMEIDATA], [
291 AC_CHECK_LINUX_BUILD([whether dentry_operations.d_revalidate takes a nameidata],
292 [ac_cv_linux_func_d_revalidate_takes_nameidata],
293 [#include <linux/fs.h>
294 #include <linux/namei.h>
295 static int reval(struct dentry *d, struct nameidata *nd) { return 0; }
296 struct dentry_operations dops;],
297 [dops.d_revalidate = reval;],
298 [DOP_REVALIDATE_TAKES_NAMEIDATA],
299 [define if your dops.d_revalidate takes a nameidata argument],
304 AC_DEFUN([LINUX_GET_SB_HAS_STRUCT_VFSMOUNT], [
305 AC_CHECK_LINUX_BUILD([for struct vfsmount * in get_sb_nodev()],
306 [ac_cv_linux_get_sb_has_struct_vfsmount],
307 [#include <linux/fs.h>],
308 [get_sb_nodev(0,0,0,0,0);],
309 [GET_SB_HAS_STRUCT_VFSMOUNT],
310 [define if your get_sb_nodev needs a struct vfsmount argument],
315 AC_DEFUN([LINUX_STATFS_TAKES_DENTRY], [
316 AC_CHECK_LINUX_BUILD([for dentry in statfs],
317 [ac_cv_linux_statfs_takes_dentry],
318 [#include <linux/fs.h>
319 #include <linux/statfs.h>],
320 [extern int simple_statfs(struct dentry *, struct kstatfs *);],
321 [STATFS_TAKES_DENTRY],
322 [define if your statfs takes a dentry argument],
327 AC_DEFUN([LINUX_LINUX_KEYRING_SUPPORT], [
328 AC_CHECK_LINUX_BUILD([for linux kernel keyring support],
329 [ac_cv_linux_keyring_support],
330 [#include <linux/rwsem.h>
331 #ifdef HAVE_LINUX_KEY_TYPE_H
332 #include <linux/key-type.h>
334 #include <linux/key.h>
335 #include <linux/keyctl.h>],
337 request_key(NULL, NULL, NULL);
338 #if !defined(KEY_POS_VIEW) || !defined(KEY_POS_SEARCH) || !defined(KEY_POS_SETATTR)
339 #error "Your linux/key.h does not contain KEY_POS_VIEW or KEY_POS_SEARCH or KEY_POS_SETATTR"
342 #error rebuild your kernel with CONFIG_KEYS
344 [LINUX_KEYRING_SUPPORT],
345 [define if your kernel has keyring support],
350 AC_DEFUN([LINUX_KEY_ALLOC_NEEDS_STRUCT_TASK], [
351 AC_CHECK_LINUX_BUILD([if key_alloc() takes a struct task *],
352 [ac_cv_key_alloc_needs_struct_task],
353 [#include <linux/rwsem.h>
354 #include <linux/key.h> ],
355 [struct task_struct *t=NULL;
357 (void) key_alloc(NULL, NULL, k.uid, k.gid, t, 0, 0);],
358 [KEY_ALLOC_NEEDS_STRUCT_TASK],
359 [define if key_alloc takes a struct task *],
360 [-Werror -Wno-pointer-arith])
364 AC_DEFUN([LINUX_KEY_ALLOC_NEEDS_CRED], [
365 AC_CHECK_LINUX_BUILD([if key_alloc() takes credentials],
366 [ac_cv_key_alloc_needs_cred],
367 [#include <linux/rwsem.h>
368 #include <linux/key.h>],
369 [struct cred *c = NULL;
371 (void) key_alloc(NULL, NULL, k.uid, k.gid, c, 0, 0);],
372 [KEY_ALLOC_NEEDS_CRED],
373 [define if key_alloc takes credentials],
374 [-Werror -Wno-pointer-arith])
378 AC_DEFUN([LINUX_INIT_WORK_HAS_DATA], [
379 AC_CHECK_LINUX_BUILD([whether INIT_WORK has a _data argument],
380 [ac_cv_linux_init_work_has_data],
381 [#include <linux/kernel.h>
382 #include <linux/workqueue.h>],
384 void f(struct work_struct *w) {}
385 struct work_struct *w;
388 [INIT_WORK_HAS_DATA],
389 [define if INIT_WORK takes a data (3rd) argument],
394 AC_DEFUN([LINUX_REGISTER_SYSCTL_TABLE_NOFLAG], [
395 AC_CHECK_LINUX_BUILD([whether register_sysctl_table has an insert_at_head argument],
396 [ac_cv_linux_register_sysctl_table_noflag],
397 [#include <linux/sysctl.h>],
398 [struct ctl_table *t; register_sysctl_table (t);],
399 [REGISTER_SYSCTL_TABLE_NOFLAG],
400 [define if register_sysctl_table has no insert_at head flag],
405 AC_DEFUN([LINUX_FOP_F_FLUSH_TAKES_FL_OWNER_T], [
406 AC_CHECK_LINUX_BUILD([whether file_operations.flush takes a fl_owner_t],
407 [ac_cv_linux_func_f_flush_takes_fl_owner_t],
408 [#include <linux/fs.h>],
409 [struct inode _inode;
412 (void)_inode.i_fop->flush(&_file, &id);],
413 [FOP_FLUSH_TAKES_FL_OWNER_T],
414 [define if your fops.flush takes an fl_owner_t argument],
419 AC_DEFUN([LINUX_FOP_F_FSYNC_TAKES_DENTRY], [
420 AC_CHECK_LINUX_BUILD([whether file_operations.fsync takes a dentry argument],
421 [ac_cv_linux_func_f_fsync_takes_dentry],
422 [#include <linux/fs.h>],
423 [struct inode _inode;
426 (void)_inode.i_fop->fsync(&_file, &_d, 0);],
427 [FOP_FSYNC_TAKES_DENTRY],
428 [define if your fops.fsync takes an dentry argument],
433 int (*fsync) (struct file *, loff_t start, loff_t end, int datasync);
435 AC_DEFUN([LINUX_FOP_F_FSYNC_TAKES_RANGE], [
436 AC_CHECK_LINUX_BUILD([whether file_operations.fsync takes a range],
437 [ac_cv_linux_func_f_fsync_takes_range],
438 [#include <linux/fs.h>],
439 [struct inode _inode;
442 (void)_inode.i_fop->fsync(&_file, start, end, 0);],
443 [FOP_FSYNC_TAKES_RANGE],
444 [define if your fops.fsync takes range arguments],
449 AC_DEFUN([LINUX_HAVE_KMEM_CACHE_T], [
450 AC_CHECK_LINUX_BUILD([whether kmem_cache_t exists],
451 [ac_cv_linux_have_kmem_cache_t],
452 [#include <linux/slab.h>],
455 [define if kmem_cache_t exists],
460 AC_DEFUN([LINUX_KMEM_CACHE_CREATE_TAKES_DTOR], [
461 AC_CHECK_LINUX_BUILD([whether kmem_cache_create takes a destructor argument],
462 [ac_cv_linux_kmem_cache_create_takes_dtor],
463 [#include <linux/slab.h>],
464 [kmem_cache_create(NULL, 0, 0, 0, NULL, NULL);],
465 [KMEM_CACHE_TAKES_DTOR],
466 [define if kmem_cache_create takes a destructor argument],
471 AC_DEFUN([LINUX_KMEM_CACHE_CREATE_CTOR_TAKES_VOID],[
472 AC_CHECK_LINUX_BUILD([whether kmem_cache_create constructor takes a void pointer],
473 [ac_cv_linux_kmem_cache_create_ctor_takes_void],
474 [#include <linux/slab.h>],
475 [void _ctor(void *v) { }; kmem_cache_create(NULL, 0, 0, 0, _ctor);],
476 [KMEM_CACHE_CTOR_TAKES_VOID],
477 [define if kmem_cache_create constructor takes a single void ptr],
482 dnl This function checks not just the existence of the splice functions,
483 dnl but also that the signature matches (they gained an extra argument
485 AC_DEFUN([LINUX_FS_STRUCT_FOP_HAS_SPLICE], [
486 AC_CHECK_LINUX_BUILD([for splice_write and splice_read in struct file_operations],
487 [ac_cv_linux_fs_struct_fop_has_splice],
488 [#include <linux/fs.h>],
489 [struct file_operations _fop;
490 _fop.splice_write(NULL, NULL, NULL, 0, 0);
491 _fop.splice_read(NULL, NULL, NULL, 0, 0);],
492 [STRUCT_FILE_OPERATIONS_HAS_SPLICE],
493 [define if struct file_operations has splice functions],
498 AC_DEFUN([LINUX_KMEM_CACHE_INIT], [
499 AC_CHECK_LINUX_BUILD([for new kmem_cache init function parameters],
500 [ac_cv_linux_kmem_cache_init],
501 [#include <linux/slab.h>],
502 [extern struct kmem_cache *
503 kmem_cache_create(const char *, size_t, size_t,
505 void (*)(struct kmem_cache *, void *));
508 [define for new kmem_cache init function parameters],
513 AC_DEFUN([LINUX_EXPORTS_PROC_ROOT_FS], [
514 AC_CHECK_LINUX_BUILD([if proc_root_fs is defined and exported],
515 [ac_cv_linux_exports_proc_root_fs],
516 [#include <linux/proc_fs.h>],
517 [struct proc_dir_entry *p = proc_root_fs;],
518 [EXPORTED_PROC_ROOT_FS],
519 [define if proc_root_fs is exported],
524 AC_DEFUN([LINUX_D_PATH_TAKES_STRUCT_PATH], [
525 AC_CHECK_LINUX_BUILD([if d_path() takes a struct path argument],
526 [ac_cv_linux_d_path_takes_struct_path],
527 [#include <linux/fs.h>],
528 [struct path *p; d_path(p, NULL, 0);],
529 [D_PATH_TAKES_STRUCT_PATH],
530 [define if d_path() takes a struct path argument],
535 AC_DEFUN([LINUX_NEW_EXPORT_OPS], [
536 AC_CHECK_LINUX_BUILD([if kernel uses new export ops],
537 [ac_cv_linux_new_export_ops],
538 [#include <linux/exportfs.h>],
539 [struct export_operations _eops;
540 _eops.fh_to_parent(NULL, NULL, 0, 0);],
542 [define if kernel uses new export ops],
547 AC_DEFUN([LINUX_POSIX_TEST_LOCK_RETURNS_CONFLICT], [
548 AC_CHECK_LINUX_BUILD([if posix_test_lock returns a struct file_lock],
549 [ac_cv_linux_posix_test_lock_returns_conflict],
550 [#include <linux/fs.h>],
551 [struct file_lock *lock;
553 lock = posix_test_lock(file, lock);],
554 [POSIX_TEST_LOCK_RETURNS_CONFLICT],
555 [define if posix_test_lock returns the conflicting lock],
560 AC_DEFUN([LINUX_POSIX_TEST_LOCK_CONFLICT_ARG], [
561 AC_CHECK_LINUX_BUILD([if posix_test_lock takes a conflict argument],
562 [ac_cv_linux_posix_test_lock_conflict_arg],
563 [#include <linux/fs.h>],
564 [struct file_lock *lock;
566 posix_test_lock(file, lock, lock);],
567 [POSIX_TEST_LOCK_CONFLICT_ARG],
568 [define if posix_test_lock takes a conflict argument],
573 AC_DEFUN([LINUX_EXPORTS_KEY_TYPE_KEYRING], [
574 AC_CHECK_LINUX_BUILD([for exported key_type_keyring],
575 [ac_cv_linux_exports_key_type_keyring],
577 #ifdef HAVE_LINUX_KEY_TYPE_H
578 #include <linux/key-type.h>
580 #include <linux/key.h>
582 [printk("%s", key_type_keyring.name);],
583 [EXPORTED_KEY_TYPE_KEYRING],
584 [define if key_type_keyring is exported],
589 AC_DEFUN([LINUX_HAVE_TRY_TO_FREEZE], [
590 AC_CHECK_LINUX_BUILD([for try_to_freeze],
591 [ac_cv_linux_have_try_to_freeze],
592 [#include <linux/sched.h>
593 #ifdef HAVE_LINUX_FREEZER_H
594 #include <linux/freezer.h>
596 [#ifdef LINUX_REFRIGERATOR_TAKES_PF_FREEZE
597 try_to_freeze(PF_FREEZE);
601 [HAVE_TRY_TO_FREEZE],
602 [define if your kernel has the try_to_freeze function],
607 AC_DEFUN([LINUX_HAVE_DCACHE_LOCK], [
608 AC_CHECK_LINUX_BUILD([for dcache_lock],
609 [ac_cv_linux_have_dcache_lock],
610 [#include <linux/fs.h> ],
611 [printk("%p", &dcache_lock);],
613 [define if dcache_lock exists],
618 AC_DEFUN([LINUX_D_COUNT_IS_INT], [
619 AC_CHECK_LINUX_BUILD([if dentry->d_count is an int],
620 [ac_cv_linux_d_count_int],
621 [#include <linux/fs.h> ],
626 [define if dentry->d_count is an int],
631 AC_DEFUN([LINUX_DOP_D_DELETE_TAKES_CONST], [
632 AC_CHECK_LINUX_BUILD([whether dentry.d_op->d_delete takes a const argument],
633 [ac_cv_linux_dop_d_delete_takes_const],
634 [#include <linux/fs.h>
635 #include <linux/dcache.h>
636 static int _d_del(const struct dentry *de) { return 0; }
637 struct dentry_operations _d_ops;],
638 [_d_ops.d_delete = _d_del;],
639 [DOP_D_DELETE_TAKES_CONST],
640 [define if dentry.d_op->d_delete takes a const argument],
645 AC_DEFUN([LINUX_IOP_MKDIR_TAKES_UMODE_T], [
646 AC_CHECK_LINUX_BUILD([whether inode.i_op->mkdir takes a umode_t argument],
647 [ac_cv_linux_iop_mkdir_takes_umode_t],
648 [#include <linux/fs.h>
649 static int _mkdir(struct inode *i, struct dentry *d, umode_t m) { return 0; }
650 struct inode_operations _i_ops;],
651 [_i_ops.mkdir = _mkdir;],
652 [IOP_MKDIR_TAKES_UMODE_T],
653 [define if inode.i_op->mkdir takes a umode_t argument],
658 AC_DEFUN([LINUX_IOP_CREATE_TAKES_UMODE_T], [
659 AC_CHECK_LINUX_BUILD([whether inode.i_op->create takes a umode_t argument],
660 [ac_cv_linux_iop_create_takes_umode_t],
661 [#include <linux/fs.h>],
662 [struct inode_operations _i_ops;
663 int _create(struct inode *i, struct dentry *d, umode_t m, struct nameidata *n)
665 _i_ops.create = _create;],
666 [IOP_CREATE_TAKES_UMODE_T],
667 [define if inode.i_op->create takes a umode_t argument],
672 AC_DEFUN([LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES], [
673 AC_CHECK_LINUX_BUILD([whether export operation encode_fh takes inode arguments],
674 [ac_cv_linux_export_op_encode_fh__takes_inodes],
675 [#include <linux/exportfs.h>
676 static int _encode_fh(struct inode *i, __u32 *fh, int *len, struct inode *p) { return 0; }
677 struct export_operations _exp_ops;],
678 [_exp_ops.encode_fh = _encode_fh;],
679 [EXPORT_OP_ENCODE_FH_TAKES_INODES],
680 [define if encode_fh export op takes inode arguments],
685 AC_DEFUN([LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE], [
686 AC_CHECK_LINUX_BUILD([whether kmap_atomic takes no km_type argument],
687 [ac_cv_linux_kma_atomic_takes_no_km_type],
688 [#include <linux/highmem.h>],
689 [struct page *p = NULL;
691 [KMAP_ATOMIC_TAKES_NO_KM_TYPE],
692 [define if kmap_atomic takes no km_type argument],
697 AC_DEFUN([LINUX_DENTRY_OPEN_TAKES_PATH], [
698 AC_CHECK_LINUX_BUILD([whether dentry_open takes a path argument],
699 [ac_cv_linux_dentry_open_takes_path],
700 [#include <linux/fs.h>],
702 dentry_open(&p, 0, NULL);],
703 [DENTRY_OPEN_TAKES_PATH],
704 [define if dentry_open takes a path argument],
709 AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [
710 AC_CHECK_LINUX_BUILD([whether dentry->d_alias is an hlist],
711 [ac_cv_linux_d_alias_is_hlist],
712 [#include <linux/fs.h>],
713 [struct dentry *d = NULL;
714 struct hlist_node *hn = NULL;
715 #if defined(STRUCT_DENTRY_HAS_D_U_D_ALIAS)
716 d->d_u.d_alias = *hn;
721 [define if dentry->d_alias is an hlist],
726 AC_DEFUN([LINUX_HLIST_ITERATOR_NO_NODE], [
727 AC_CHECK_LINUX_BUILD([whether hlist iterators don't need a node parameter],
728 [ac_cv_linux_hlist_takes_no_node],
729 [#include <linux/list.h>
730 #include <linux/fs.h>],
731 [struct dentry *d = NULL, *cur;
733 #if defined(STRUCT_DENTRY_HAS_D_U_D_ALIAS)
734 # define d_alias d_u.d_alias
736 hlist_for_each_entry(cur, &ip->i_dentry, d_alias) { }
738 [HLIST_ITERATOR_NO_NODE],
739 [define if hlist iterators don't need a node parameter],
744 AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [
745 AC_CHECK_LINUX_BUILD([whether inode_operations.create takes a bool],
746 [ac_cv_linux_func_i_create_takes_bool],
747 [#include <linux/fs.h>
748 #include <linux/namei.h>],
749 [struct inode _inode = {};
750 struct dentry _dentry;
752 (void)_inode.i_op->create(&_inode, &_dentry, 0, b);],
753 [IOP_CREATE_TAKES_BOOL],
754 [define if your iops.create takes a bool argument],
759 AC_DEFUN([LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED], [
760 AC_CHECK_LINUX_BUILD([whether dentry_operations.d_revalidate takes an unsigned int],
761 [ac_cv_linux_func_d_revalidate_takes_unsigned],
762 [#include <linux/fs.h>
763 #include <linux/namei.h>
764 static int reval(struct dentry *d, unsigned int i) { return 0; }
765 struct dentry_operations _d_ops;],
766 [_d_ops.d_revalidate = reval;],
767 [DOP_REVALIDATE_TAKES_UNSIGNED],
768 [define if your dops.d_revalidate takes an unsigned int argument],
773 AC_DEFUN([LINUX_IOP_LOOKUP_TAKES_UNSIGNED], [
774 AC_CHECK_LINUX_BUILD([whether inode operation lookup takes an unsigned int],
775 [ac_cv_linux_func_lookup_takes_unsigned],
776 [#include <linux/fs.h>
777 #include <linux/namei.h>
778 static struct dentry *look(struct inode *i, struct dentry *d, unsigned int j) { return NULL; }
779 struct inode_operations _i_ops;],
780 [_i_ops.lookup = look;],
781 [IOP_LOOKUP_TAKES_UNSIGNED],
782 [define if your iops.lookup takes an unsigned int argument],
787 AC_DEFUN([LINUX_D_INVALIDATE_IS_VOID], [
788 AC_CHECK_LINUX_BUILD([whether d_invalidate returns void],
789 [ac_cv_linux_func_d_invalidate_returns_void],
790 [#include <linux/fs.h>],
792 void d_invalidate(struct dentry *);
794 [D_INVALIDATE_IS_VOID],
795 [define if your d_invalidate returns void],