From patchwork Mon Dec 9 20:48:15 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 299187 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id DCD952C00A2 for ; Tue, 10 Dec 2013 07:56:44 +1100 (EST) Received: from localhost ([::1]:45858 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vq7se-0001As-1m for incoming@patchwork.ozlabs.org; Mon, 09 Dec 2013 15:56:40 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51275) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vq7le-0005gv-9q for qemu-devel@nongnu.org; Mon, 09 Dec 2013 15:49:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vq7lY-0003nd-O2 for qemu-devel@nongnu.org; Mon, 09 Dec 2013 15:49:26 -0500 Received: from mail-ea0-x22b.google.com ([2a00:1450:4013:c01::22b]:55846) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vq7lY-0003nM-CJ for qemu-devel@nongnu.org; Mon, 09 Dec 2013 15:49:20 -0500 Received: by mail-ea0-f171.google.com with SMTP id h10so1835743eak.30 for ; Mon, 09 Dec 2013 12:49:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=zykgoaUs8RMXct06dhb5I4eEmyniaREnlNCjQ1AL5rQ=; b=bYZ2p716VjfWt3qnoFLfmgXZz2El5yyCaYctxpgQ5VVdOV0mq0A6ndOpi/it626FwV N8htiD52YagOsPVH8HShl0Y8AZPzJcFN0btXbPcGHe/sbVImGAWyeTJAVz8KrWChWqF+ imJmFrt+ze1LMvmeSCr2Jf0YTt5ZrvTRuOpDwYIFPcalrkHYas82PZ9QKlkMhtlgyVTy zsAHL+TKBg0S4YOoJ8fOP0Dl1jffqHRdwlc+38zXb6uJYq6yPmiU38u2lYJbO8sCzld0 BQPE+w8NhUoGZQnu0R/+VGunNohsGGfoKoZWyty3HZQzU1VVAU1AEnESK++iZwHQi8K+ oJZQ== X-Received: by 10.14.2.73 with SMTP id 49mr14536115eee.15.1386622159453; Mon, 09 Dec 2013 12:49:19 -0800 (PST) Received: from yakj.lan (net-2-35-202-54.cust.dsl.vodafone.it. [2.35.202.54]) by mx.google.com with ESMTPSA id a45sm33003002eem.6.2013.12.09.12.49.16 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 09 Dec 2013 12:49:17 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Mon, 9 Dec 2013 21:48:15 +0100 Message-Id: <1386622112-27257-14-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.4.2 In-Reply-To: <1386622112-27257-1-git-send-email-pbonzini@redhat.com> References: <1386622112-27257-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4013:c01::22b Cc: cornelia.huck@de.ibm.com, afaerber@suse.de, mst@redhat.com Subject: [Qemu-devel] [PULL 13/30] virtio-blk-dataplane: Improve error reporting X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Andreas Färber Return an Error so that it can be propagated later. Tested-by: Stefan Hajnoczi Acked-by: Stefan Hajnoczi [AF: Rebased] Signed-off-by: Andreas Färber Signed-off-by: Paolo Bonzini --- hw/block/dataplane/virtio-blk.c | 30 ++++++++++++++++-------------- hw/block/dataplane/virtio-blk.h | 5 +++-- hw/block/virtio-blk.c | 15 +++++++++++++-- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c index f2d7350..1e57f3a 100644 --- a/hw/block/dataplane/virtio-blk.c +++ b/hw/block/dataplane/virtio-blk.c @@ -380,8 +380,9 @@ static void start_data_plane_bh(void *opaque) s, QEMU_THREAD_JOINABLE); } -bool virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *blk, - VirtIOBlockDataPlane **dataplane) +void virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *blk, + VirtIOBlockDataPlane **dataplane, + Error **errp) { VirtIOBlockDataPlane *s; int fd; @@ -389,33 +390,35 @@ bool virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *blk, *dataplane = NULL; if (!blk->data_plane) { - return true; + return; } if (blk->scsi) { - error_report("device is incompatible with x-data-plane, use scsi=off"); - return false; + error_setg(errp, + "device is incompatible with x-data-plane, use scsi=off"); + return; } if (blk->config_wce) { - error_report("device is incompatible with x-data-plane, " - "use config-wce=off"); - return false; + error_setg(errp, "device is incompatible with x-data-plane, " + "use config-wce=off"); + return; } /* If dataplane is (re-)enabled while the guest is running there could be * block jobs that can conflict. */ if (bdrv_in_use(blk->conf.bs)) { - error_report("cannot start dataplane thread while device is in use"); - return false; + error_setg(errp, + "cannot start dataplane thread while device is in use"); + return; } fd = raw_get_aio_fd(blk->conf.bs); if (fd < 0) { - error_report("drive is incompatible with x-data-plane, " - "use format=raw,cache=none,aio=native"); - return false; + error_setg(errp, "drive is incompatible with x-data-plane, " + "use format=raw,cache=none,aio=native"); + return; } s = g_new0(VirtIOBlockDataPlane, 1); @@ -427,7 +430,6 @@ bool virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *blk, bdrv_set_in_use(blk->conf.bs, 1); *dataplane = s; - return true; } void virtio_blk_data_plane_destroy(VirtIOBlockDataPlane *s) diff --git a/hw/block/dataplane/virtio-blk.h b/hw/block/dataplane/virtio-blk.h index c90e99f..1750c99 100644 --- a/hw/block/dataplane/virtio-blk.h +++ b/hw/block/dataplane/virtio-blk.h @@ -19,8 +19,9 @@ typedef struct VirtIOBlockDataPlane VirtIOBlockDataPlane; -bool virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *blk, - VirtIOBlockDataPlane **dataplane); +void virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *blk, + VirtIOBlockDataPlane **dataplane, + Error **errp); void virtio_blk_data_plane_destroy(VirtIOBlockDataPlane *s); void virtio_blk_data_plane_start(VirtIOBlockDataPlane *s); void virtio_blk_data_plane_stop(VirtIOBlockDataPlane *s); diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index 7f0440f..7552ce3 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -657,6 +657,7 @@ static void virtio_blk_migration_state_changed(Notifier *notifier, void *data) VirtIOBlock *s = container_of(notifier, VirtIOBlock, migration_state_notifier); MigrationState *mig = data; + Error *err = NULL; if (migration_in_setup(mig)) { if (!s->dataplane) { @@ -671,7 +672,11 @@ static void virtio_blk_migration_state_changed(Notifier *notifier, void *data) } bdrv_drain_all(); /* complete in-flight non-dataplane requests */ virtio_blk_data_plane_create(VIRTIO_DEVICE(s), &s->blk, - &s->dataplane); + &s->dataplane, &err); + if (err != NULL) { + error_report("%s", error_get_pretty(err)); + error_free(err); + } } } #endif /* CONFIG_VIRTIO_BLK_DATA_PLANE */ @@ -681,6 +686,9 @@ static int virtio_blk_device_init(VirtIODevice *vdev) DeviceState *qdev = DEVICE(vdev); VirtIOBlock *s = VIRTIO_BLK(vdev); VirtIOBlkConf *blk = &(s->blk); +#ifdef CONFIG_VIRTIO_BLK_DATA_PLANE + Error *err = NULL; +#endif static int virtio_blk_id; if (!blk->conf.bs) { @@ -708,7 +716,10 @@ static int virtio_blk_device_init(VirtIODevice *vdev) s->vq = virtio_add_queue(vdev, 128, virtio_blk_handle_output); #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE - if (!virtio_blk_data_plane_create(vdev, blk, &s->dataplane)) { + virtio_blk_data_plane_create(vdev, blk, &s->dataplane, &err); + if (err != NULL) { + error_report("%s", error_get_pretty(err)); + error_free(err); virtio_cleanup(vdev); return -1; }