From: Priyankar Jain <priyankar.jain@nutanix.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Priyankar Jain" <priyankar.jain@nutanix.com>
Subject: [PATCH] dbus-vmstate: Increase the size of input stream buffer used during load
Date: Tue, 2 Feb 2021 13:01:46 +0000 [thread overview]
Message-ID: <1612270906-153951-1-git-send-email-priyankar.jain@nutanix.com> (raw)
This commit fixes an issue where migration is failing in the load phase
because of a false alarm about data unavailability.
Following is the error received when the amount of data to be transferred
exceeds the default buffer size setup by G_BUFFERED_INPUT_STREAM(4KiB),
even when the maximum data size supported by this backend is 1MiB
(DBUS_VMSTATE_SIZE_LIMIT):
dbus_vmstate_post_load: Invalid vmstate size: 4364
qemu-kvm: error while loading state for instance 0x0 of device 'dbus-vmstate/dbus-vmstate'
This commit sets the size of the input stream buffer used during load to
DBUS_VMSTATE_SIZE_LIMIT which is the maximum amount of data a helper can
send during save phase.
Secondly, this commit makes sure that the input stream buffer is loaded before
checking the size of the data available in it, rectifying the false alarm about
data unavailability.
Signed-off-by: Priyankar Jain <priyankar.jain@nutanix.com>
---
backends/dbus-vmstate.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/backends/dbus-vmstate.c b/backends/dbus-vmstate.c
index bd050e8..3b8a116 100644
--- a/backends/dbus-vmstate.c
+++ b/backends/dbus-vmstate.c
@@ -204,6 +204,8 @@ static int dbus_vmstate_post_load(void *opaque, int version_id)
m = g_memory_input_stream_new_from_data(self->data, self->data_size, NULL);
s = g_data_input_stream_new(m);
g_data_input_stream_set_byte_order(s, G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN);
+ g_buffered_input_stream_set_buffer_size(G_BUFFERED_INPUT_STREAM(s),
+ DBUS_VMSTATE_SIZE_LIMIT);
nelem = g_data_input_stream_read_uint32(s, NULL, &err);
if (err) {
@@ -241,11 +243,23 @@ static int dbus_vmstate_post_load(void *opaque, int version_id)
}
len = g_data_input_stream_read_uint32(s, NULL, &err);
+ if (len > DBUS_VMSTATE_SIZE_LIMIT) {
+ error_report("%s: Invalid vmstate size: %u", __func__, len);
+ return -1;
+ }
+
+ g_buffered_input_stream_fill(G_BUFFERED_INPUT_STREAM(s), len, NULL,
+ &err);
+ if (err) {
+ goto error;
+ }
+
avail = g_buffered_input_stream_get_available(
G_BUFFERED_INPUT_STREAM(s));
-
- if (len > DBUS_VMSTATE_SIZE_LIMIT || len > avail) {
- error_report("%s: Invalid vmstate size: %u", __func__, len);
+ if (len > avail) {
+ error_report("%s: Not enough data available to load for Id: '%s'. "
+ "Available data size: %lu, Actual vmstate size: %u",
+ __func__, id, avail, len);
return -1;
}
--
1.8.3.1
next reply other threads:[~2021-02-02 13:05 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-02 13:01 Priyankar Jain [this message]
2021-02-02 13:11 ` [PATCH] dbus-vmstate: Increase the size of input stream buffer used during load Marc-André Lureau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1612270906-153951-1-git-send-email-priyankar.jain@nutanix.com \
--to=priyankar.jain@nutanix.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).