Right now, we're using intermediate buffers when reading from the backends, and then writing to the descriptor chain. For backends capable of using readv, we should translate the descriptor chain into an iovec and use it to do the operation in a single copy.