]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
vmspawn: fix --extra-drive= option
authorNick Labich <nick@labich.org>
Thu, 3 Apr 2025 15:11:55 +0000 (11:11 -0400)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 9 Apr 2025 19:38:51 +0000 (04:38 +0900)
Follow-up for 369655330d57a82b6f346a77798968f135221c99.

Fixes #36807.

src/vmspawn/vmspawn.c

index cbf7badbfe7576e6feafed9015fb00f2e115e0d0..e3cb03f651c6576e3b735ae1e1963d3eac6581ce 100644 (file)
@@ -1974,6 +1974,13 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
                         return log_oom();
         }
 
+        if (arg_image || strv_length(arg_extra_drives) > 0) {
+                r = strv_extend_many(&cmdline, "-device", "virtio-scsi-pci,id=scsi");
+                if (r < 0)
+                        return log_oom();
+        }
+
+        unsigned i = 0;
         STRV_FOREACH(drive, arg_extra_drives) {
                 _cleanup_free_ char *escaped_drive = NULL;
 
@@ -1985,7 +1992,15 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
                 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", escaped_drive);
+                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();
         }
@@ -2021,9 +2036,7 @@ static int run_virtual_machine(int kvm_device_fd, int vhost_device_fd) {
                 if (r < 0)
                         return log_oom();
 
-                r = strv_extend_many(&cmdline,
-                        "-device", "virtio-scsi-pci,id=scsi",
-                        "-device", "scsi-hd,drive=vmspawn,bootindex=1");
+                r = strv_extend_many(&cmdline, "-device", "scsi-hd,drive=vmspawn,bootindex=1");
                 if (r < 0)
                         return log_oom();
         }