libvhost-user: Send messages with no data
The response to a VHOST_USER_POSTCOPY_ADVISE contains a fd but doesn't actually contain any data. FIx vu_message_write so that it doesn't do a 0-byte write() call, since this was ending up with rc=0 that was confusing the error handling code. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
9952e807fd
commit
e3638151da
@ -323,13 +323,15 @@ vu_message_write(VuDev *dev, int conn_fd, VhostUserMsg *vmsg)
|
||||
rc = sendmsg(conn_fd, &msg, 0);
|
||||
} while (rc < 0 && (errno == EINTR || errno == EAGAIN));
|
||||
|
||||
do {
|
||||
if (vmsg->data) {
|
||||
rc = write(conn_fd, vmsg->data, vmsg->size);
|
||||
} else {
|
||||
rc = write(conn_fd, p + VHOST_USER_HDR_SIZE, vmsg->size);
|
||||
}
|
||||
} while (rc < 0 && (errno == EINTR || errno == EAGAIN));
|
||||
if (vmsg->size) {
|
||||
do {
|
||||
if (vmsg->data) {
|
||||
rc = write(conn_fd, vmsg->data, vmsg->size);
|
||||
} else {
|
||||
rc = write(conn_fd, p + VHOST_USER_HDR_SIZE, vmsg->size);
|
||||
}
|
||||
} while (rc < 0 && (errno == EINTR || errno == EAGAIN));
|
||||
}
|
||||
|
||||
if (rc <= 0) {
|
||||
vu_panic(dev, "Error while writing: %s", strerror(errno));
|
||||
|
Loading…
Reference in New Issue
Block a user