summaryrefslogtreecommitdiffstats
path: root/usr.sbin/vmd/vioraw.c
diff options
context:
space:
mode:
authorreyk <reyk@openbsd.org>2018-10-08 16:32:01 +0000
committerreyk <reyk@openbsd.org>2018-10-08 16:32:01 +0000
commit7361395374362d014ae90cba8e4ce848295ac0b4 (patch)
tree5a2e96be8dac013055f0f9b19897aecf982df4c5 /usr.sbin/vmd/vioraw.c
parentmerge 1.8.1 (diff)
downloadwireguard-openbsd-7361395374362d014ae90cba8e4ce848295ac0b4.tar.xz
wireguard-openbsd-7361395374362d014ae90cba8e4ce848295ac0b4.zip
Add support for qcow2 base images (external snapshots).
This works is from Ori Bernstein, committing on his behalf: Add support to vmd for external snapshots. That is, snapshots that are derived from a base image. Data lookups start in the derived image, and if the derived image does not contain some data, the search proceeds ot the base image. Multiple derived images may exist off of a single base image. A limitation of this format is that modifying the base image will corrupt the derived image. This change also adds support for creating disk derived disk images to vmctl. To use it: vmctl create derived.qcow2 -s 16G -b base.qcow2 From Ori Bernstein OK mlarkin@ reyk@
Diffstat (limited to 'usr.sbin/vmd/vioraw.c')
-rw-r--r--usr.sbin/vmd/vioraw.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/usr.sbin/vmd/vioraw.c b/usr.sbin/vmd/vioraw.c
index e02ab67c5dc..370e5b06892 100644
--- a/usr.sbin/vmd/vioraw.c
+++ b/usr.sbin/vmd/vioraw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vioraw.c,v 1.3 2018/09/28 12:35:32 reyk Exp $ */
+/* $OpenBSD: vioraw.c,v 1.4 2018/10/08 16:32:01 reyk Exp $ */
/*
* Copyright (c) 2018 Ori Bernstein <ori@eigenstate.org>
*
@@ -53,19 +53,21 @@ raw_close(void *file, int stayopen)
* returning -1 for error, 0 for success.
*/
int
-virtio_init_raw(struct virtio_backing *file, off_t *szp, int fd)
+virtio_init_raw(struct virtio_backing *file, off_t *szp, int *fd, size_t nfd)
{
off_t sz;
int *fdp;
- sz = lseek(fd, 0, SEEK_END);
+ if (nfd != 1)
+ return -1;
+ sz = lseek(fd[0], 0, SEEK_END);
if (sz == -1)
return -1;
fdp = malloc(sizeof(int));
if (!fdp)
return -1;
- *fdp = fd;
+ *fdp = fd[0];
file->p = fdp;
file->pread = raw_pread;
file->pwrite = raw_pwrite;