--- Begin Message ---
This was a limitation of drive-mirror, blockdev mirror is able
to reopen image with a different aio.

Do the change when generating the blockdev_format

Signed-off-by: Alexandre Derumier <alexandre.derum...@groupe-cyllene.com>
---
 PVE/QemuServer.pm          | 9 ++++++---
 PVE/QemuServer/Blockdev.pm | 3 +++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index f68c5bf2..534aa2df 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -8228,8 +8228,6 @@ sub qemu_blockdev_mirror {
     my $dst_drive = dclone($drive);
     $dst_drive->{file} = $dst_volid;
     $dst_drive->{zeroinit} = 1 if $is_zero_initialized;
-    #improve: if target storage don't support aio uring,change it to default 
native
-    #and remove clone_disk_check_io_uring()
 
     #add new block device
     my $target_drive_blockdev = generate_drive_blockdev($storecfg, $dst_drive);
@@ -8621,7 +8619,12 @@ sub clone_disk {
            $dst_format = 'raw';
            $size = PVE::QemuServer::Drive::TPMSTATE_DISK_SIZE;
        } else {
-           clone_disk_check_io_uring($drive, $storecfg, $src_storeid, 
$storeid, $use_drive_mirror);
+
+           my $machine_type = 
PVE::QemuServer::Machine::get_current_qemu_machine($vmid);
+           # blockdev can reopen with a different aio
+           if 
(!PVE::QemuServer::Machine::is_machine_version_at_least($machine_type, 10, 0)) {
+               clone_disk_check_io_uring($drive, $storecfg, $src_storeid, 
$storeid, $use_drive_mirror);
+           }
 
            $size = PVE::Storage::volume_size_info($storecfg, $drive->{file}, 
10);
        }
diff --git a/PVE/QemuServer/Blockdev.pm b/PVE/QemuServer/Blockdev.pm
index 01fef66d..60a996f3 100644
--- a/PVE/QemuServer/Blockdev.pm
+++ b/PVE/QemuServer/Blockdev.pm
@@ -68,6 +68,9 @@ sub generate_blockdev_drive_aio {
                $aio = "threads";
            }
        }
+    } elsif ($drive->{aio} eq 'io_uring' && 
!storage_allows_io_uring_default($scfg, $cache_direct)) {
+       #change aio if io_uring is not supported by storage
+       $aio = $cache_direct ? 'native' : 'threads';
     }
     return $aio;
 }
-- 
2.39.5



--- End Message ---
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to