From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52153) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z7Eu1-0003yy-4y for qemu-devel@nongnu.org; Mon, 22 Jun 2015 23:29:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z7Etw-0002X0-4K for qemu-devel@nongnu.org; Mon, 22 Jun 2015 23:29:37 -0400 Message-ID: <5588D296.1040400@redhat.com> Date: Tue, 23 Jun 2015 11:29:26 +0800 From: Jason Wang MIME-Version: 1.0 References: <1432879994-28344-1-git-send-email-jasowang@redhat.com> In-Reply-To: <1432879994-28344-1-git-send-email-jasowang@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] vhost: correctly pass error to caller in vhost_dev_enable_notifiers() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, mst@redhat.com 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-stable@nongnu.org > Cc: Michael S. Tsirkin > Signed-off-by: Jason Wang > --- > 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