mirror of https://github.com/xemu-project/xemu.git
qemu-img commit: Report errors while closing the image
blk_unref() can't report any errors that happen while closing the image. For example, if qcow2 hits an -ENOSPC error while writing out dirty bitmaps when it's closed, it prints error messages to stderr, but 'qemu-img commit' won't see any error return value and will therefore look successful with exit code 0. In order to fix this, manually inactivate the image first before calling blk_unref(). This already performs the operations that would be most likely to fail while closing the image, but it can still return errors. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20230112191454.169353-3-kwolf@redhat.com> Reviewed-by: Hanna Czenczek <hreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
b03dd9613b
commit
44efba2d71
13
qemu-img.c
13
qemu-img.c
|
@ -450,6 +450,11 @@ static BlockBackend *img_open(bool image_opts,
|
||||||
blk = img_open_file(filename, NULL, fmt, flags, writethrough, quiet,
|
blk = img_open_file(filename, NULL, fmt, flags, writethrough, quiet,
|
||||||
force_share);
|
force_share);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (blk) {
|
||||||
|
blk_set_force_allow_inactivate(blk);
|
||||||
|
}
|
||||||
|
|
||||||
return blk;
|
return blk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1120,6 +1125,14 @@ unref_backing:
|
||||||
done:
|
done:
|
||||||
qemu_progress_end();
|
qemu_progress_end();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Manually inactivate the image first because this way we can know whether
|
||||||
|
* an error occurred. blk_unref() doesn't tell us about failures.
|
||||||
|
*/
|
||||||
|
ret = bdrv_inactivate_all();
|
||||||
|
if (ret < 0 && !local_err) {
|
||||||
|
error_setg_errno(&local_err, -ret, "Error while closing the image");
|
||||||
|
}
|
||||||
blk_unref(blk);
|
blk_unref(blk);
|
||||||
|
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
|
|
Loading…
Reference in New Issue