diff options
author | Kevin Wolf <kwolf@redhat.com> | 2016-06-09 16:50:16 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2016-06-16 15:19:55 +0200 |
commit | 5ddda0b8f0c07c8082c87d248c8eb23f43fd44a1 (patch) | |
tree | 33b4b848efc8ff105528baa6bd19cce6df446b93 /block/io.c | |
parent | f1e8474115d6be7eda14092050ffa2b031afb729 (diff) |
block: Make .bdrv_load_vmstate() vectored
This brings it in line with .bdrv_save_vmstate().
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'block/io.c')
-rw-r--r-- | block/io.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/block/io.c b/block/io.c index 72d72109a5..aac9b67d94 100644 --- a/block/io.c +++ b/block/io.c @@ -1871,13 +1871,28 @@ int bdrv_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos) int bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf, int64_t pos, int size) { + QEMUIOVector qiov; + struct iovec iov = { + .iov_base = buf, + .iov_len = size, + }; + + qemu_iovec_init_external(&qiov, &iov, 1); + return bdrv_readv_vmstate(bs, &qiov, pos); +} + +int bdrv_readv_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos) +{ BlockDriver *drv = bs->drv; - if (!drv) + + if (!drv) { return -ENOMEDIUM; - if (drv->bdrv_load_vmstate) - return drv->bdrv_load_vmstate(bs, buf, pos, size); - if (bs->file) - return bdrv_load_vmstate(bs->file->bs, buf, pos, size); + } else if (drv->bdrv_load_vmstate) { + return drv->bdrv_load_vmstate(bs, qiov, pos); + } else if (bs->file) { + return bdrv_readv_vmstate(bs->file->bs, qiov, pos); + } + return -ENOTSUP; } |