Am 30.05.2025 um 10:44 hat Hanna Czenczek geschrieben:
> Add a command-line-only option to prevent overwriting the file specified
> as external data file.
>
> This option is only available on the qemu-img create command line, not
> via blockdev-create, as it makes no sense there: That interface
> separates file creation and formatting, so where the external data file
> attached to a newly formatted qcow2 node comes from is completely up to
> the user.
>
> Implementation detail: Enabling this option will not only not overwrite
> the external data file, but also assume it already exists, for two
> reasons:
> - It is simpler than checking whether the file exists, and only skipping
> creating it when it does not. It is therefore also less error-prone,
> i.e. we can never accidentally overwrite an existing file because we
> made some mistake in checking whether it exists.
> - I think it makes sense from a user's perspective: You set this option
> when you want to use an existing data file, and you unset it when you
> want a new one. Getting an error when you expect to use an existing
> data file seems to me a nice warning that something is not right.
>
> Signed-off-by: Hanna Czenczek <[email protected]>
> @@ -4004,6 +4029,40 @@ qcow2_co_create_opts(BlockDriver *drv, const char
> *filename, QemuOpts *opts,
> goto finish;
> }
>
> + qcow2_opts = &create_options->u.qcow2;
> +
> + if (!qcow2_opts->has_preallocation) {
> + qcow2_opts->preallocation = PREALLOC_MODE_OFF;
> + }
> + if (!qcow2_opts->has_data_file_raw) {
> + qcow2_opts->data_file_raw = false;
> + }
These checks are technically redundant, QAPI already gives us a zeroed
object. At least for the enum, it might still be nice not to rely on the
order. I don't think there's a reason for the bool one, though.
Kevin