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,
|
||||
force_share);
|
||||
}
|
||||
|
||||
if (blk) {
|
||||
blk_set_force_allow_inactivate(blk);
|
||||
}
|
||||
|
||||
return blk;
|
||||
}
|
||||
|
||||
@ -1120,6 +1125,14 @@ unref_backing:
|
||||
done:
|
||||
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);
|
||||
|
||||
if (local_err) {
|
||||
|
Loading…
Reference in New Issue
Block a user