diff options
-rw-r--r-- | block/block-backend.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/block/block-backend.c b/block/block-backend.c index ed2f4b67a2..b48c91f4e1 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -2158,6 +2158,11 @@ static int blk_do_set_aio_context(BlockBackend *blk, AioContext *new_context, return ret; } } + /* + * Make blk->ctx consistent with the root node before we invoke any + * other operations like drain that might inquire blk->ctx + */ + blk->ctx = new_context; if (tgm->throttle_state) { bdrv_drained_begin(bs); throttle_group_detach_aio_context(tgm); @@ -2166,9 +2171,10 @@ static int blk_do_set_aio_context(BlockBackend *blk, AioContext *new_context, } bdrv_unref(bs); + } else { + blk->ctx = new_context; } - blk->ctx = new_context; return 0; } |