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 <f...@redhat.com> > --- > 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? > + /* 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