From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60643) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b2woC-0007UA-VD for qemu-devel@nongnu.org; Wed, 18 May 2016 04:26:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b2wo7-0001v0-KN for qemu-devel@nongnu.org; Wed, 18 May 2016 04:26:23 -0400 Date: Wed, 18 May 2016 11:26:10 +0300 From: "Michael S. Tsirkin" Message-ID: <20160518112603-mutt-send-email-mst@redhat.com> References: <1463559850-5244-1-git-send-email-famz@redhat.com> <1463559850-5244-3-git-send-email-famz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1463559850-5244-3-git-send-email-famz@redhat.com> Subject: Re: [Qemu-devel] [PATCH 2/3] virtio-blk: Remove op blocker for dataplane List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: qemu-devel@nongnu.org, Kevin Wolf , Max Reitz , Markus Armbruster , Stefan Hajnoczi , Paolo Bonzini , qemu-block@nongnu.org On Wed, May 18, 2016 at 04:24:09PM +0800, Fam Zheng wrote: > Block layer is prepared to unspecialize dataplane, an evidence is this > almost complete list of unblocked operations. It has all types except > two (actually three if DATAPLANE itself counts but blockdev.c makes sure > attaching twice is not possible): MIRROR_TARGET and BACKUP_TARGET. > > blockdev-mirror refuses to start if target is attached, so the first is > not a problem. > > By removing BACKUP_TARGET, blockdev-backup will become permissive to > write to a virtio-blk dataplane disk, but that is not worse than > non-dataplane given the latter is already possible. In either case, > blockdev.c always checks the target and source are on the same > AioContext, or bring them together if possible. > > Signed-off-by: Fam Zheng Acked-by: Michael S. Tsirkin > --- > hw/block/dataplane/virtio-blk.c | 63 ----------------------------------------- > 1 file changed, 63 deletions(-) > > diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c > index 3cb97c9..2073f9a 100644 > --- a/hw/block/dataplane/virtio-blk.c > +++ b/hw/block/dataplane/virtio-blk.c > @@ -37,8 +37,6 @@ struct VirtIOBlockDataPlane { > EventNotifier *guest_notifier; /* irq */ > QEMUBH *bh; /* bh for guest notification */ > > - Notifier insert_notifier, remove_notifier; > - > /* Note that these EventNotifiers are assigned by value. This is > * fine as long as you do not call event_notifier_cleanup on them > * (because you don't own the file descriptor or handle; you just > @@ -46,9 +44,6 @@ struct VirtIOBlockDataPlane { > */ > IOThread *iothread; > AioContext *ctx; > - > - /* Operation blocker on BDS */ > - Error *blocker; > }; > > /* Raise an interrupt to signal guest, if necessary */ > @@ -68,54 +63,6 @@ static void notify_guest_bh(void *opaque) > event_notifier_set(s->guest_notifier); > } > > -static void data_plane_set_up_op_blockers(VirtIOBlockDataPlane *s) > -{ > - assert(!s->blocker); > - error_setg(&s->blocker, "block device is in use by data plane"); > - blk_op_block_all(s->conf->conf.blk, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_RESIZE, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_DRIVE_DEL, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_BACKUP_SOURCE, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_CHANGE, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_COMMIT_SOURCE, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_COMMIT_TARGET, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_EJECT, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_EXTERNAL_SNAPSHOT, > - s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT, > - s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT_DELETE, > - s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_MIRROR_SOURCE, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_STREAM, s->blocker); > - blk_op_unblock(s->conf->conf.blk, BLOCK_OP_TYPE_REPLACE, s->blocker); > -} > - > -static void data_plane_remove_op_blockers(VirtIOBlockDataPlane *s) > -{ > - if (s->blocker) { > - blk_op_unblock_all(s->conf->conf.blk, s->blocker); > - error_free(s->blocker); > - s->blocker = NULL; > - } > -} > - > -static void data_plane_blk_insert_notifier(Notifier *n, void *data) > -{ > - VirtIOBlockDataPlane *s = container_of(n, VirtIOBlockDataPlane, > - insert_notifier); > - assert(s->conf->conf.blk == data); > - data_plane_set_up_op_blockers(s); > -} > - > -static void data_plane_blk_remove_notifier(Notifier *n, void *data) > -{ > - VirtIOBlockDataPlane *s = container_of(n, VirtIOBlockDataPlane, > - remove_notifier); > - assert(s->conf->conf.blk == data); > - data_plane_remove_op_blockers(s); > -} > - > /* Context: QEMU global mutex held */ > void virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *conf, > VirtIOBlockDataPlane **dataplane, > @@ -158,13 +105,6 @@ void virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *conf, > s->ctx = iothread_get_aio_context(s->iothread); > s->bh = aio_bh_new(s->ctx, notify_guest_bh, s); > > - s->insert_notifier.notify = data_plane_blk_insert_notifier; > - s->remove_notifier.notify = data_plane_blk_remove_notifier; > - blk_add_insert_bs_notifier(conf->conf.blk, &s->insert_notifier); > - blk_add_remove_bs_notifier(conf->conf.blk, &s->remove_notifier); > - > - data_plane_set_up_op_blockers(s); > - > *dataplane = s; > } > > @@ -176,9 +116,6 @@ void virtio_blk_data_plane_destroy(VirtIOBlockDataPlane *s) > } > > virtio_blk_data_plane_stop(s); > - data_plane_remove_op_blockers(s); > - notifier_remove(&s->insert_notifier); > - notifier_remove(&s->remove_notifier); > qemu_bh_delete(s->bh); > object_unref(OBJECT(s->iothread)); > g_free(s); > -- > 2.8.2