From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40444) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b4eNV-00083M-KK for qemu-devel@nongnu.org; Sun, 22 May 2016 21:09:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b4eNU-00078c-Hh for qemu-devel@nongnu.org; Sun, 22 May 2016 21:09:53 -0400 Date: Mon, 23 May 2016 09:09:47 +0800 From: Fam Zheng Message-ID: <20160523010947.GB8734@ad.usersys.redhat.com> References: <1463559850-5244-1-git-send-email-famz@redhat.com> <1463559850-5244-2-git-send-email-famz@redhat.com> <20160519204252.GE24257@stefanha-x1.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160519204252.GE24257@stefanha-x1.localdomain> Subject: Re: [Qemu-devel] [PATCH 1/3] blockdev-backup: Don't move target AioContext if it's attached List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: qemu-devel@nongnu.org, Kevin Wolf , Max Reitz , Markus Armbruster , "Michael S. Tsirkin" , Paolo Bonzini , qemu-block@nongnu.org On Thu, 05/19 13:42, Stefan Hajnoczi wrote: > On Wed, May 18, 2016 at 04:24:08PM +0800, Fam Zheng wrote: > > If the BDS is attached, it will want to stay on the AioContext where its > > BlockBackend is. Don't call bdrv_set_aio_context in this case. > > What should the user do when they hit this error? The user should backup to a dedicate target newly inserted with blockdev-add. On this error, the user must be using a dataplane enabled virtual disk as backup target, which is not supported. The mirror job already refuses any attached device, but for backup we want to support image fleecing and colo, in which case the target is attached to NBD. Fam > > > Signed-off-by: Fam Zheng > > --- > > blockdev.c | 12 +++++++++++- > > 1 file changed, 11 insertions(+), 1 deletion(-) > > > > diff --git a/blockdev.c b/blockdev.c > > index 1892b8e..eb15593 100644 > > --- a/blockdev.c > > +++ b/blockdev.c > > @@ -3376,8 +3376,18 @@ void do_blockdev_backup(const char *device, const char *target, > > } > > target_bs = blk_bs(target_blk); > > > > + if (bdrv_get_aio_context(target_bs) != aio_context) { > > + if (!target_bs->blk) { > > + /* The target BDS is not attached, we can safely move it to another > > + * AioContext. */ > > + bdrv_set_aio_context(target_bs, aio_context); > > + } else { > > + error_setg(errp, "Target is attached to a different thread from " > > + "source."); > > + goto out; > > + } > > + } > > bdrv_ref(target_bs); > > - bdrv_set_aio_context(target_bs, aio_context); > > backup_start(bs, target_bs, speed, sync, NULL, on_source_error, > > on_target_error, block_job_cb, bs, txn, &local_err); > > if (local_err != NULL) { > > -- > > 2.8.2 > >