- prepare_write / commit_write currently run without the inode 
  semaphore held.  the will cause a race with i_size updates; the 
  fix is probably the next point (otherwise there is no write 
  concurrancy possible).
- prepare_write / commit_write on each page should be turned into 
  an operation over the range of the write.
- large writes should be split up and pipelined for slow devices.  
  needs to be addressed as part of the larger picture of write 
  throttling.
- vfree sleeps, which causes put_ioctx to sleep.  yuck.
- exit_aio needs to cancel requests before doing the put_ioctx

From Suparna:

6. Todo Items/Pending Issues

- aio fsync
- aio sendfile
- direct aio path (reorder vfs paths to have a single rw_kvec interface from
  fs when it really needs to do i/o)
- aio readv/writev
- i/o cancellation implementation (best effort; cancel i/os on process exit ?)
- io_wait implementation (needs hashed waitqueues)
- check for any races in current filesystem implementation (?)
- implementations for other filesystems
- network aio rewrite
- in-kernel signal delivery mechanism for aio requests
- making sub-tasks truly async (waiting for request slots, bmap calls)
- debugging aids to help detect drivers which aren't totally async (e.g
  use semaphores - need to check which) or other sub-tasks which aren't
  truly async
- flow control in aio (address write throtting issue)
- mmaped ring buffer (Could lockless approaches be more fragile than
  we forsee now ? Is it worth it ? How much does it save ?)
- kernel memory pinning issue (pinning user buffers too early ? may be
  able to improve this with cross-memory descriptors once aio flow control
  is in place)
- explore at-least-N
- explore io_submit_wait
- aio request priorities (get the basic scheme in place, later relate it
  to the priority based i/o scheduler when that happens)
- user space grouping of multiple completion queues (priorities,
  concurrency control etc)
- interfacing with generic event namespace (pollfs) approach  (viro's idea)

