]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - include/linux/aio.h
fs: split generic and aio kiocb
[mirror_ubuntu-artful-kernel.git] / include / linux / aio.h
1 #ifndef __LINUX__AIO_H
2 #define __LINUX__AIO_H
3
4 #include <linux/list.h>
5 #include <linux/workqueue.h>
6 #include <linux/aio_abi.h>
7 #include <linux/uio.h>
8 #include <linux/rcupdate.h>
9
10 #include <linux/atomic.h>
11
12 struct kioctx;
13 struct kiocb;
14
15 #define KIOCB_KEY 0
16
17 typedef int (kiocb_cancel_fn)(struct kiocb *);
18
19 #define IOCB_EVENTFD (1 << 0)
20
21 struct kiocb {
22 struct file *ki_filp;
23 loff_t ki_pos;
24 void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
25 void *private;
26 int ki_flags;
27 };
28
29 static inline bool is_sync_kiocb(struct kiocb *kiocb)
30 {
31 return kiocb->ki_complete == NULL;
32 }
33
34 static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
35 {
36 *kiocb = (struct kiocb) {
37 .ki_filp = filp,
38 };
39 }
40
41 /* prototypes */
42 #ifdef CONFIG_AIO
43 struct mm_struct;
44 extern void exit_aio(struct mm_struct *mm);
45 extern long do_io_submit(aio_context_t ctx_id, long nr,
46 struct iocb __user *__user *iocbpp, bool compat);
47 void kiocb_set_cancel_fn(struct kiocb *req, kiocb_cancel_fn *cancel);
48 #else
49 struct mm_struct;
50 static inline void exit_aio(struct mm_struct *mm) { }
51 static inline long do_io_submit(aio_context_t ctx_id, long nr,
52 struct iocb __user * __user *iocbpp,
53 bool compat) { return 0; }
54 static inline void kiocb_set_cancel_fn(struct kiocb *req,
55 kiocb_cancel_fn *cancel) { }
56 #endif /* CONFIG_AIO */
57
58 /* for sysctl: */
59 extern unsigned long aio_nr;
60 extern unsigned long aio_max_nr;
61
62 #endif /* __LINUX__AIO_H */