qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/3] blockdev-backup: Don't move target AioConte


From: Fam Zheng
Subject: Re: [Qemu-devel] [PATCH 1/3] blockdev-backup: Don't move target AioContext if it's attached
Date: Mon, 23 May 2016 09:09:47 +0800
User-agent: Mutt/1.6.1 (2016-04-27)

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 <address@hidden>
> > ---
> >  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
> > 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]