block: use drained section around bdrv_snapshot_delete
Do not use bdrv_drain, since by itself it does not guarantee anything. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
8382ba6153
commit
27a7649a48
|
@ -229,6 +229,8 @@ int bdrv_snapshot_delete(BlockDriverState *bs,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
BlockDriver *drv = bs->drv;
|
BlockDriver *drv = bs->drv;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!drv) {
|
if (!drv) {
|
||||||
error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, bdrv_get_device_name(bs));
|
error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, bdrv_get_device_name(bs));
|
||||||
return -ENOMEDIUM;
|
return -ENOMEDIUM;
|
||||||
|
@ -239,18 +241,21 @@ int bdrv_snapshot_delete(BlockDriverState *bs,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* drain all pending i/o before deleting snapshot */
|
/* drain all pending i/o before deleting snapshot */
|
||||||
bdrv_drain(bs);
|
bdrv_drained_begin(bs);
|
||||||
|
|
||||||
if (drv->bdrv_snapshot_delete) {
|
if (drv->bdrv_snapshot_delete) {
|
||||||
return drv->bdrv_snapshot_delete(bs, snapshot_id, name, errp);
|
ret = drv->bdrv_snapshot_delete(bs, snapshot_id, name, errp);
|
||||||
|
} else if (bs->file) {
|
||||||
|
ret = bdrv_snapshot_delete(bs->file->bs, snapshot_id, name, errp);
|
||||||
|
} else {
|
||||||
|
error_setg(errp, "Block format '%s' used by device '%s' "
|
||||||
|
"does not support internal snapshot deletion",
|
||||||
|
drv->format_name, bdrv_get_device_name(bs));
|
||||||
|
ret = -ENOTSUP;
|
||||||
}
|
}
|
||||||
if (bs->file) {
|
|
||||||
return bdrv_snapshot_delete(bs->file->bs, snapshot_id, name, errp);
|
bdrv_drained_end(bs);
|
||||||
}
|
return ret;
|
||||||
error_setg(errp, "Block format '%s' used by device '%s' "
|
|
||||||
"does not support internal snapshot deletion",
|
|
||||||
drv->format_name, bdrv_get_device_name(bs));
|
|
||||||
return -ENOTSUP;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int bdrv_snapshot_delete_by_id_or_name(BlockDriverState *bs,
|
int bdrv_snapshot_delete_by_id_or_name(BlockDriverState *bs,
|
||||||
|
|
Loading…
Reference in New Issue