- 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)