On 28.05.2013 18:43, Laine Stump wrote: > On 05/27/2013 02:44 AM, Michal Privoznik wrote: >> Currently, if there's an error opening /dev/vhost-net (e.g. because >> it doesn't exist) but it's not required we proceed with vhostfd array >> filled with -1 and vhostfdSize unchanged. Later, when constructing >> the qemu command line only non-negative items within vhostfd array >> are taken into account. This means, vhostfdSize may be greater than >> the actual count of non-negative items in vhostfd array. This results >> in improper command line arguments being generated, e.g.: >> >> -netdev tap,fd=21,id=hostnet0,vhost=on,vhostfd=(null) >> --- >> src/qemu/qemu_command.c | 14 ++++++++------ >> 1 file changed, 8 insertions(+), 6 deletions(-) >> >> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c >> index 0373626..c4a162a 100644 >> --- a/src/qemu/qemu_command.c >> +++ b/src/qemu/qemu_command.c >> @@ -486,6 +486,10 @@ qemuOpenVhostNet(virDomainDefPtr def, >> "but is unavailable")); >> goto error; >> } >> + VIR_WARN("Unable to open vhost-net. Opened so far %d, requested %d", >> + i, *vhostfdSize); >> + *vhostfdSize = i; >> + break; >> } >> } >> virDomainAuditNetDevice(def, net, "/dev/vhost-net", *vhostfdSize); >> @@ -6560,12 +6564,10 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, >> } >> >> for (i = 0; i < vhostfdSize; i++) { >> - if (vhostfd[i] >= 0) { >> - virCommandTransferFD(cmd, vhostfd[i]); >> - if (virAsprintf(&vhostfdName[i], "%d", vhostfd[i]) < 0) { >> - virReportOOMError(); >> - goto cleanup; >> - } >> + virCommandTransferFD(cmd, vhostfd[i]); >> + if (virAsprintf(&vhostfdName[i], "%d", vhostfd[i]) < 0) { >> + virReportOOMError(); >> + goto cleanup; >> } >> } >> > > ACK. > Thanks, pushed. michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list