aio.h 1.4 KB

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