On 05/29/2015 02:13 PM, Jason Wang wrote: > We override the error value r in fail_vq, this will cause the caller > can't detect the failure which may cause the caller may disable the > notifiers twice if vhost is failed to start. Fix this by using another > variable to keep track the return value of set_host_notifier(). > > Fixes b0b3db79559e57db340b292621c397e7a6cdbdc5 ("vhost-net: cleanup > host notifiers at last step") > > Cc: qemu-sta...@nongnu.org > Cc: Michael S. Tsirkin <m...@redhat.com> > Signed-off-by: Jason Wang <jasow...@redhat.com> > --- > hw/virtio/vhost.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c > index 54851b7..a7858d3 100644 > --- a/hw/virtio/vhost.c > +++ b/hw/virtio/vhost.c > @@ -921,7 +921,7 @@ int vhost_dev_enable_notifiers(struct vhost_dev *hdev, > VirtIODevice *vdev) > BusState *qbus = BUS(qdev_get_parent_bus(DEVICE(vdev))); > VirtioBusState *vbus = VIRTIO_BUS(qbus); > VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(vbus); > - int i, r; > + int i, r, e; > if (!k->set_host_notifier) { > fprintf(stderr, "binding does not support host notifiers\n"); > r = -ENOSYS; > @@ -939,12 +939,12 @@ int vhost_dev_enable_notifiers(struct vhost_dev *hdev, > VirtIODevice *vdev) > return 0; > fail_vq: > while (--i >= 0) { > - r = k->set_host_notifier(qbus->parent, hdev->vq_index + i, false); > - if (r < 0) { > + e = k->set_host_notifier(qbus->parent, hdev->vq_index + i, false); > + if (e < 0) { > fprintf(stderr, "vhost VQ %d notifier cleanup error: %d\n", i, > -r); > fflush(stderr); > } > - assert (r >= 0); > + assert (e >= 0); > } > fail: > return r;
Ping