There is a WIP branch of openzfs that supports fully asynchronous reads and largely asynchronous writes (tx assignment and prefaulting indirect blocks might block). Leveraging this outside of zvol requires VFS support and changes to aio. This is fairly simplistic:
- limited to 32MB per operation and will fall back to synchronous for larger requests
- uses a uio_bio which passes an array of held pages to the file system. The file system calls uiobiomove to do the actual data movement.
- currently doesn't expose async fsync to aio