[libvirt] [PATCH] qemu: Report errors from iohelper
Michal Privoznik
mprivozn at redhat.com
Mon Oct 29 16:08:12 UTC 2012
On 25.10.2012 23:56, Eric Blake wrote:
> On 10/24/2012 09:49 AM, Michal Privoznik wrote:
>> Currently, we use iohelper when saving/restoring a domain.
>> However, if there's some kind of error (like I/O) it is not
>> propagated to libvirt. Since it is not qemu who is doing
>> the actual write() it will not get error. The iohelper does.
>> Therefore we should check for iohelper errors as it makes
>> libvirt more user friendly.
>> ---
>>
>> diff to v1:
>> -incorporate the event loop to read iohelper's stderr
>> @@ -3282,9 +3283,11 @@ doCoreDump(struct qemud_driver *driver,
>
>>
>> + /* deliberately don't use virCommandNonblockingFDs here as it is all or
>> + * nothing. And we want iohelper's stdin to block. */
>> + if (virSetNonBlock(ret->err_fd) < 0) {
>
> This comment is confusing, since you say we don't use nonblocking and
> then immediately set our side of stderr to nonblocking. Maybe you meant
> to say that we leave helper's stdin or stdout alone (default blocking)
> because they are not tied to our event loop, but set our side of stderr
> to be nonblocking so we can read it from our event loop.
>
> ACK once you fix up that comment.
>
Thanks, pushed with this:
diff --git a/src/util/virfile.c b/src/util/virfile.c
index 36b3420..9593151 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -291,7 +291,9 @@ virFileWrapperFdNew(int *fd, const char *name, unsigned int flags)
goto error;
/* deliberately don't use virCommandNonblockingFDs here as it is all or
- * nothing. And we want iohelper's stdin to block. */
+ * nothing. And we want iohelper's stdin and stdout to block (default).
+ * However, stderr is read within event loop and therefore it must be
+ * nonblocking.*/
if (virSetNonBlock(ret->err_fd) < 0) {
virReportSystemError(errno, "%s",
_("Failed to set non-blocking "
More information about the libvir-list
mailing list