mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-31 22:33:53 -06:00
block: Add error parameter to blk_insert_bs()
Now that blk_insert_bs() requests the BlockBackend permissions for the node it attaches to, it can fail. Instead of aborting, pass the errors to the callers. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Acked-by: Fam Zheng <famz@redhat.com>
This commit is contained in:
parent
6d0eb64d5c
commit
d7086422b1
14 changed files with 100 additions and 29 deletions
|
@ -220,6 +220,7 @@ void commit_start(const char *job_id, BlockDriverState *bs,
|
|||
BlockDriverState *iter;
|
||||
BlockDriverState *overlay_bs;
|
||||
Error *local_err = NULL;
|
||||
int ret;
|
||||
|
||||
assert(top != bs);
|
||||
if (top == base) {
|
||||
|
@ -256,8 +257,7 @@ void commit_start(const char *job_id, BlockDriverState *bs,
|
|||
bdrv_reopen_multiple(bdrv_get_aio_context(bs), reopen_queue, &local_err);
|
||||
if (local_err != NULL) {
|
||||
error_propagate(errp, local_err);
|
||||
block_job_unref(&s->common);
|
||||
return;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -277,11 +277,17 @@ void commit_start(const char *job_id, BlockDriverState *bs,
|
|||
|
||||
/* FIXME Use real permissions */
|
||||
s->base = blk_new(0, BLK_PERM_ALL);
|
||||
blk_insert_bs(s->base, base);
|
||||
ret = blk_insert_bs(s->base, base, errp);
|
||||
if (ret < 0) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* FIXME Use real permissions */
|
||||
s->top = blk_new(0, BLK_PERM_ALL);
|
||||
blk_insert_bs(s->top, top);
|
||||
ret = blk_insert_bs(s->top, top, errp);
|
||||
if (ret < 0) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
s->active = bs;
|
||||
|
||||
|
@ -294,6 +300,16 @@ void commit_start(const char *job_id, BlockDriverState *bs,
|
|||
|
||||
trace_commit_start(bs, base, top, s);
|
||||
block_job_start(&s->common);
|
||||
return;
|
||||
|
||||
fail:
|
||||
if (s->base) {
|
||||
blk_unref(s->base);
|
||||
}
|
||||
if (s->top) {
|
||||
blk_unref(s->top);
|
||||
}
|
||||
block_job_unref(&s->common);
|
||||
}
|
||||
|
||||
|
||||
|
@ -332,11 +348,17 @@ int bdrv_commit(BlockDriverState *bs)
|
|||
|
||||
/* FIXME Use real permissions */
|
||||
src = blk_new(0, BLK_PERM_ALL);
|
||||
blk_insert_bs(src, bs);
|
||||
|
||||
/* FIXME Use real permissions */
|
||||
backing = blk_new(0, BLK_PERM_ALL);
|
||||
blk_insert_bs(backing, bs->backing->bs);
|
||||
|
||||
ret = blk_insert_bs(src, bs, NULL);
|
||||
if (ret < 0) {
|
||||
goto ro_cleanup;
|
||||
}
|
||||
|
||||
ret = blk_insert_bs(backing, bs->backing->bs, NULL);
|
||||
if (ret < 0) {
|
||||
goto ro_cleanup;
|
||||
}
|
||||
|
||||
length = blk_getlength(src);
|
||||
if (length < 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue