I think this sounds like a great idea. I think you may run into some trouble removing the copies in the non-IOV case. In particular, I think there are some cases besides get_block and put_block that assume that the input and output are the same. Perhaps I'm wrong and it should certainly all be obvious.