diff options
author | Alberto Garcia <berto@igalia.com> | 2016-05-27 12:53:39 +0200 |
---|---|---|
committer | Max Reitz <mreitz@redhat.com> | 2016-06-16 15:20:37 +0200 |
commit | 834fe28ddffaec469cf048c7a48eb610e7a6e906 (patch) | |
tree | 279162e363f9453b829c68fb689927dd65459f6e /block | |
parent | 0824afda0cd20045ffe87d58e142774514b61026 (diff) | |
download | qemu-834fe28ddffaec469cf048c7a48eb610e7a6e906.zip qemu-834fe28ddffaec469cf048c7a48eb610e7a6e906.tar.gz qemu-834fe28ddffaec469cf048c7a48eb610e7a6e906.tar.bz2 |
block: Create the commit block job before reopening any image
If the base or overlay images need to be reopened in read-write mode
but the block_job_create() call fails then no one will put those
images back in read-only mode.
We can solve this problem easily by calling block_job_create() first.
Signed-off-by: Alberto Garcia <berto@igalia.com>
Message-id: aa495045770a6f1a7cc5d408397a17c75097fdd8.1464346103.git.berto@igalia.com
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/commit.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/block/commit.c b/block/commit.c index 8a00e11..444333b 100644 --- a/block/commit.c +++ b/block/commit.c @@ -236,6 +236,11 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, return; } + s = block_job_create(&commit_job_driver, bs, speed, cb, opaque, errp); + if (!s) { + return; + } + orig_base_flags = bdrv_get_flags(base); orig_overlay_flags = bdrv_get_flags(overlay_bs); @@ -252,16 +257,12 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base, bdrv_reopen_multiple(reopen_queue, &local_err); if (local_err != NULL) { error_propagate(errp, local_err); + block_job_unref(&s->common); return; } } - s = block_job_create(&commit_job_driver, bs, speed, cb, opaque, errp); - if (!s) { - return; - } - s->base = blk_new(); blk_insert_bs(s->base, base); |