savevm async IO channel: channel writev: fix return value in error case

The documentation in include/io/channel.h states that -1 or
QIO_CHANNEL_ERR_BLOCK should be returned upon error. Simply passing
along the return value from the blk-functions has the potential to
confuse the call sides. Non-blocking mode is not implemented
currently, so -1 it is.

The "return ret" was mistakenly left over from the previous
QEMUFileOps based implementation. Also, use error_setg_errno(), since
the blk(_co)_p{readv,writev} functions return errno codes.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
This commit is contained in:
Fiona Ebner 2022-10-17 09:18:33 +02:00 committed by Wolfgang Bumiller
parent ed23707ed7
commit 0af826b448

View File

@ -15,19 +15,19 @@ Additionally, allows tracking the current position from the outside
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
--- ---
migration/channel-savevm-async.c | 181 +++++++++++++++++++++++++++++++ migration/channel-savevm-async.c | 182 +++++++++++++++++++++++++++++++
migration/channel-savevm-async.h | 51 +++++++++ migration/channel-savevm-async.h | 51 +++++++++
migration/meson.build | 1 + migration/meson.build | 1 +
3 files changed, 233 insertions(+) 3 files changed, 234 insertions(+)
create mode 100644 migration/channel-savevm-async.c create mode 100644 migration/channel-savevm-async.c
create mode 100644 migration/channel-savevm-async.h create mode 100644 migration/channel-savevm-async.h
diff --git a/migration/channel-savevm-async.c b/migration/channel-savevm-async.c diff --git a/migration/channel-savevm-async.c b/migration/channel-savevm-async.c
new file mode 100644 new file mode 100644
index 0000000000..efea3842cf index 0000000000..06d5484778
--- /dev/null --- /dev/null
+++ b/migration/channel-savevm-async.c +++ b/migration/channel-savevm-async.c
@@ -0,0 +1,181 @@ @@ -0,0 +1,182 @@
+/* +/*
+ * QIO Channel implementation to be used by savevm-async QMP calls + * QIO Channel implementation to be used by savevm-async QMP calls
+ */ + */
@ -96,7 +96,7 @@ index 0000000000..efea3842cf
+ // returns 0 on success + // returns 0 on success
+ ret = blk_preadv(be, *saioc->bs_pos, size, &qiov, 0); + ret = blk_preadv(be, *saioc->bs_pos, size, &qiov, 0);
+ if (ret < 0) { + if (ret < 0) {
+ error_setg(errp, "blk_preadv returned %d", ret); + error_setg_errno(errp, -ret, "blk_preadv failed");
+ return -1; + return -1;
+ } + }
+ +
@ -129,7 +129,8 @@ index 0000000000..efea3842cf
+ } + }
+ +
+ if (ret < 0) { + if (ret < 0) {
+ return ret; + error_setg_errno(errp, -ret, "blk(_co)_pwritev failed");
+ return -1;
+ } + }
+ +
+ *saioc->bs_pos += qiov.size; + *saioc->bs_pos += qiov.size;