mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
block/io: bring request check to bdrv_co_(read,write)v_vmstate
Only qcow2 driver supports vmstate. In qcow2 these requests go through .bdrv_co_p{read,write}v_part handlers. So, let's do our basic check for the request on vmstate generic handlers. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20210903102807.27127-2-vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
0961525705
commit
b984b2968b
1 changed files with 16 additions and 2 deletions
18
block/io.c
18
block/io.c
|
@ -2810,7 +2810,12 @@ bdrv_co_readv_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
|
||||||
{
|
{
|
||||||
BlockDriver *drv = bs->drv;
|
BlockDriver *drv = bs->drv;
|
||||||
BlockDriverState *child_bs = bdrv_primary_bs(bs);
|
BlockDriverState *child_bs = bdrv_primary_bs(bs);
|
||||||
int ret = -ENOTSUP;
|
int ret;
|
||||||
|
|
||||||
|
ret = bdrv_check_qiov_request(pos, qiov->size, qiov, 0, NULL);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (!drv) {
|
if (!drv) {
|
||||||
return -ENOMEDIUM;
|
return -ENOMEDIUM;
|
||||||
|
@ -2822,6 +2827,8 @@ bdrv_co_readv_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
|
||||||
ret = drv->bdrv_load_vmstate(bs, qiov, pos);
|
ret = drv->bdrv_load_vmstate(bs, qiov, pos);
|
||||||
} else if (child_bs) {
|
} else if (child_bs) {
|
||||||
ret = bdrv_co_readv_vmstate(child_bs, qiov, pos);
|
ret = bdrv_co_readv_vmstate(child_bs, qiov, pos);
|
||||||
|
} else {
|
||||||
|
ret = -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdrv_dec_in_flight(bs);
|
bdrv_dec_in_flight(bs);
|
||||||
|
@ -2834,7 +2841,12 @@ bdrv_co_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
|
||||||
{
|
{
|
||||||
BlockDriver *drv = bs->drv;
|
BlockDriver *drv = bs->drv;
|
||||||
BlockDriverState *child_bs = bdrv_primary_bs(bs);
|
BlockDriverState *child_bs = bdrv_primary_bs(bs);
|
||||||
int ret = -ENOTSUP;
|
int ret;
|
||||||
|
|
||||||
|
ret = bdrv_check_qiov_request(pos, qiov->size, qiov, 0, NULL);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (!drv) {
|
if (!drv) {
|
||||||
return -ENOMEDIUM;
|
return -ENOMEDIUM;
|
||||||
|
@ -2846,6 +2858,8 @@ bdrv_co_writev_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos)
|
||||||
ret = drv->bdrv_save_vmstate(bs, qiov, pos);
|
ret = drv->bdrv_save_vmstate(bs, qiov, pos);
|
||||||
} else if (child_bs) {
|
} else if (child_bs) {
|
||||||
ret = bdrv_co_writev_vmstate(child_bs, qiov, pos);
|
ret = bdrv_co_writev_vmstate(child_bs, qiov, pos);
|
||||||
|
} else {
|
||||||
|
ret = -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
bdrv_dec_in_flight(bs);
|
bdrv_dec_in_flight(bs);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue