5d33ae4b7a
The generic vhost code expects that many of the VhostOps methods in the respective backends set errno on errors. However, none of the existing backends actually bothers to do so. In a number of those methods errno from the failed call is clobbered by successful later calls to some library functions; on a few code paths the generic vhost code then negates and returns that errno, thus making failures look as successes to the caller. As a result, in certain scenarios (e.g. live migration) the device doesn't notice the first failure and goes on through its state transitions as if everything is ok, instead of taking recovery actions (break and reestablish the vhost-user connection, cancel migration, etc) before it's too late. To fix this, consolidate on the convention to return negated errno on failures throughout generic vhost, and use it for error propagation. Signed-off-by: Roman Kagan <rvkagan@yandex-team.ru> Message-Id: <20211111153354.18807-10-rvkagan@yandex-team.ru> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> |
||
---|---|---|
.. | ||
Kconfig | ||
meson.build | ||
trace-events | ||
trace.h | ||
vhost-backend.c | ||
vhost-scsi-pci.c | ||
vhost-stub.c | ||
vhost-user-blk-pci.c | ||
vhost-user-fs-pci.c | ||
vhost-user-fs.c | ||
vhost-user-i2c-pci.c | ||
vhost-user-i2c.c | ||
vhost-user-input-pci.c | ||
vhost-user-rng-pci.c | ||
vhost-user-rng.c | ||
vhost-user-scsi-pci.c | ||
vhost-user-vsock-pci.c | ||
vhost-user-vsock.c | ||
vhost-user.c | ||
vhost-vdpa.c | ||
vhost-vsock-common.c | ||
vhost-vsock-pci.c | ||
vhost-vsock.c | ||
vhost.c | ||
virtio-9p-pci.c | ||
virtio-balloon-pci.c | ||
virtio-balloon.c | ||
virtio-blk-pci.c | ||
virtio-bus.c | ||
virtio-crypto-pci.c | ||
virtio-crypto.c | ||
virtio-input-host-pci.c | ||
virtio-input-pci.c | ||
virtio-iommu-pci.c | ||
virtio-iommu.c | ||
virtio-mem-pci.c | ||
virtio-mem-pci.h | ||
virtio-mem.c | ||
virtio-mmio.c | ||
virtio-net-pci.c | ||
virtio-pci.c | ||
virtio-pci.h | ||
virtio-pmem-pci.c | ||
virtio-pmem-pci.h | ||
virtio-pmem.c | ||
virtio-rng-pci.c | ||
virtio-rng.c | ||
virtio-scsi-pci.c | ||
virtio-serial-pci.c | ||
virtio.c |