Alexander Leidinger 6a1162d4cd MFP4 (with some minor changes):
Implement the linux_io_* syscalls (AIO). They are only enabled if the native
AIO code is available (either compiled in to the kernel or as a module) at
the time the functions are used. If the AIO stuff is not available there
will be a ENOSYS.

From the submitter:
---snip---
DESIGN NOTES:

1. Linux permits a process to own multiple AIO queues (distinguished by
   "context"), but FreeBSD creates only one single AIO queue per process.
   My code maintains a request queue (STAILQ of queue(3)) per "context",
   and throws all AIO requests of all contexts owned by a process into
   the single FreeBSD per-process AIO queue.

   When the process calls io_destroy(2), io_getevents(2), io_submit(2) and
   io_cancel(2), my code can pick out requests owned by the specified context
   from the single FreeBSD per-process AIO queue according to the per-context
   request queues maintained by my code.

2. The request queue maintained by my code stores contrast information between
   Linux IO control blocks (struct linux_iocb) and FreeBSD IO control blocks
   (struct aiocb). FreeBSD IO control block actually exists in userland memory
   space, required by FreeBSD native aio_XXXXXX(2).

3. It is quite troubling that the function io_getevents() of libaio-0.3.105
   needs to use Linux-specific "struct aio_ring", which is a partial mirror
   of context in user space. I would rather take the address of context in
   kernel as the context ID, but the io_getevents() of libaio forces me to
   take the address of the "ring" in user space as the context ID.

   To my surprise, one comment line in the file "io_getevents.c" of
   libaio-0.3.105 reads:

             Ben will hate me for this

REFERENCE:

1. Linux kernel source code:   http://www.kernel.org/pub/linux/kernel/v2.6/
   (include/linux/aio_abi.h, fs/aio.c)

2. Linux manual pages:         http://www.kernel.org/pub/linux/docs/manpages/
   (io_setup(2), io_destroy(2), io_getevents(2), io_submit(2), io_cancel(2))

3. Linux Scalability Effort:   http://lse.sourceforge.net/io/aio.html
   The design notes:           http://lse.sourceforge.net/io/aionotes.txt

4. The package libaio, both source and binary:
       http://rpmfind.net/linux/rpm2html/search.php?query=libaio
   Simple transparent interface to Linux AIO system calls.

5. Libaio-oracle:              http://oss.oracle.com/projects/libaio-oracle/
   POSIX AIO implementation based on Linux AIO system calls (depending on
   libaio).
---snip---

Submitted by:	Li, Xiao <intron@intron.ac>
2006-10-15 14:22:14 +00:00
..
2004-08-30 03:35:17 +00:00
2006-10-15 14:22:14 +00:00
2006-07-27 19:12:49 +00:00
2006-03-11 08:42:08 +00:00
2005-02-25 06:59:56 +00:00
2004-08-16 15:24:03 +00:00
2006-03-16 15:18:17 +00:00
2006-03-16 15:18:17 +00:00
2004-09-04 03:32:15 +00:00
2005-10-18 06:11:08 +00:00
2004-10-13 05:41:09 +00:00
2006-02-26 17:51:22 +00:00
2005-10-05 05:26:03 +00:00
2006-07-27 19:12:49 +00:00
2004-01-11 07:01:30 +00:00
2006-02-17 10:52:59 +00:00
2004-12-29 08:44:30 +00:00
2006-09-22 22:11:29 +00:00
2006-08-26 18:40:25 +00:00
2006-03-12 19:06:06 +00:00
2006-10-15 14:22:14 +00:00
2005-02-03 23:01:01 +00:00
2005-09-20 06:48:55 +00:00
2005-05-10 12:02:18 +00:00
2006-06-18 05:04:42 +00:00
2005-03-14 16:04:27 +00:00
2003-08-30 08:01:05 +00:00
2005-09-19 10:14:05 +00:00
2006-07-25 00:45:55 +00:00
2005-02-09 08:35:24 +00:00
2006-02-18 23:49:28 +00:00
2005-08-10 04:01:21 +00:00
2006-03-30 18:39:24 +00:00
2005-03-14 10:23:34 +00:00