mirror of https://gitee.com/openkylin/qemu.git
block: Fix locking in qmp_block_resize()
The drain functions assume that we hold the AioContext lock of the
drained block node. Make sure to actually take the lock.
Cc: qemu-stable@nongnu.org
Fixes: eb94b81a94
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Message-Id: <20201203172311.68232-3-kwolf@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
d9dbf25f96
commit
8089eab2bd
|
@ -2481,13 +2481,16 @@ void coroutine_fn qmp_block_resize(bool has_device, const char *device,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bdrv_co_lock(bs);
|
||||||
bdrv_drained_begin(bs);
|
bdrv_drained_begin(bs);
|
||||||
|
bdrv_co_unlock(bs);
|
||||||
|
|
||||||
old_ctx = bdrv_co_enter(bs);
|
old_ctx = bdrv_co_enter(bs);
|
||||||
blk_truncate(blk, size, false, PREALLOC_MODE_OFF, 0, errp);
|
blk_truncate(blk, size, false, PREALLOC_MODE_OFF, 0, errp);
|
||||||
bdrv_co_leave(bs, old_ctx);
|
bdrv_co_leave(bs, old_ctx);
|
||||||
bdrv_drained_end(bs);
|
|
||||||
|
|
||||||
bdrv_co_lock(bs);
|
bdrv_co_lock(bs);
|
||||||
|
bdrv_drained_end(bs);
|
||||||
blk_unref(blk);
|
blk_unref(blk);
|
||||||
bdrv_co_unlock(bs);
|
bdrv_co_unlock(bs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue