diff --git a/include/osv/uio.h b/include/osv/uio.h
index b57b81e5139a467c9ed96d95c0bf0f27bc75e190..bd9ff17b0223a6c3ded482b257746a733f7b05ef 100644
--- a/include/osv/uio.h
+++ b/include/osv/uio.h
@@ -60,6 +60,16 @@ struct uio {
 	enum	uio_rw uio_rw;		/* operation */
 };
 
+// This layout support only one buffer per uio, which means that it will
+// only work for a iovcnt of 1. We can extend later if needed, but because we
+// are reading it page by page, it should be fine for now.
+struct uio_mapper {
+    struct uio uio;
+    size_t buf_size;
+    size_t buf_off;
+    void *buffer;
+};
+
 int	copyinuio(struct iovec *iovp, u_int iovcnt, struct uio **uiop);
 int	uiomove(void *cp, int n, struct uio *uio);