From: Lennart Poettering Date: Thu, 12 Jun 2025 11:11:59 +0000 (+0200) Subject: vmspawn: add extra drives *after* the primary drive, not before X-Git-Tag: v258-rc1~332 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=42514e54370a69acfbf19d04eb49e449abf088ca;p=thirdparty%2Fsystemd.git vmspawn: add extra drives *after* the primary drive, not before Otherwise, if you mix --image= with --extra-drive= you end up with /dev/sda pointing to the latter, nor the former. Which is really weird of course... --- diff --git a/src/vmspawn/vmspawn.c b/src/vmspawn/vmspawn.c index 0def23f346b..add30e3cf2d 100644 --- a/src/vmspawn/vmspawn.c +++ b/src/vmspawn/vmspawn.c @@ -1944,31 +1944,6 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) { return log_oom(); } - unsigned i = 0; - STRV_FOREACH(drive, arg_extra_drives) { - _cleanup_free_ char *escaped_drive = NULL; - - r = strv_extend(&cmdline, "-blockdev"); - if (r < 0) - return log_oom(); - - escaped_drive = escape_qemu_value(*drive); - if (!escaped_drive) - return log_oom(); - - r = strv_extendf(&cmdline, "driver=raw,cache.direct=off,cache.no-flush=on,file.driver=file,file.filename=%s,node-name=vmspawn_extra_%u", escaped_drive, i); - if (r < 0) - return log_oom(); - - r = strv_extend(&cmdline, "-device"); - if (r < 0) - return log_oom(); - - r = strv_extendf(&cmdline, "scsi-hd,drive=vmspawn_extra_%u", i++); - if (r < 0) - return log_oom(); - } - if (kernel) { r = strv_extend_many(&cmdline, "-kernel", kernel); if (r < 0) @@ -2035,6 +2010,31 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) { return log_oom(); } + size_t i = 0; + STRV_FOREACH(drive, arg_extra_drives) { + _cleanup_free_ char *escaped_drive = NULL; + + r = strv_extend(&cmdline, "-blockdev"); + if (r < 0) + return log_oom(); + + escaped_drive = escape_qemu_value(*drive); + if (!escaped_drive) + return log_oom(); + + r = strv_extendf(&cmdline, "driver=raw,cache.direct=off,cache.no-flush=on,file.driver=file,file.filename=%s,node-name=vmspawn_extra_%zu", escaped_drive, i); + if (r < 0) + return log_oom(); + + r = strv_extend(&cmdline, "-device"); + if (r < 0) + return log_oom(); + + r = strv_extendf(&cmdline, "scsi-hd,drive=vmspawn_extra_%zu", i++); + if (r < 0) + return log_oom(); + } + r = strv_prepend(&arg_kernel_cmdline_extra, "console=hvc0"); if (r < 0) return log_oom();