On Fri, 05/20 10:03, Kevin Wolf wrote:
> Am 18.05.2016 um 10:24 hat Fam Zheng geschrieben:
> > 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.
> >
> > Signed-off-by: Fam Zheng <[email protected]>
> > ---
> > 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) {
>
> How should this ever happen when we have target_bs = blk_bs(target_blk)
> two lines above?
I must have made a mistake with git or my editor, I meant to change it to
bdrv_lookup_bs above.
Fam
>
> > + /* 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;
> > + }
> > + }
>
> Kevin