]> git.proxmox.com Git - pve-storage.git/commitdiff
zfs: fix wait by alloc_image
authorWolfgang Link <w.link@proxmox.com>
Wed, 28 Jan 2015 09:37:58 +0000 (10:37 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 30 Jan 2015 05:24:56 +0000 (06:24 +0100)
Signed-off-by: Wolfgang Link <w.link@proxmox.com>
PVE/Storage/ZFSPlugin.pm
PVE/Storage/ZFSPoolPlugin.pm

index 581ef6cddabf410f345efe650efaa4ec603255b8..d8acce92a4a3c4dff0cbf5899f8c5c9c5c024609 100644 (file)
@@ -265,7 +265,14 @@ sub clone_image {
 sub alloc_image {
     my ($class, $storeid, $scfg, $vmid, $fmt, $name, $size) = @_;
     
-    my $volname = $class->SUPER::alloc_image($storeid, $scfg, $vmid, $fmt, $name, $size);
+    die "unsupported format '$fmt'" if $fmt ne 'raw';
+
+    die "illegal name '$name' - sould be 'vm-$vmid-*'\n"
+    if $name && $name !~ m/^vm-$vmid-/;
+
+    my $volname = $class->zfs_find_free_diskname($storeid, $scfg, $vmid) if !$name;
+    
+    $class->zfs_create_zvol($scfg, $name, $size);
  
     my $guid = $class->zfs_create_lu($scfg, $volname);
     $class->zfs_add_lun_mapping_entry($scfg, $volname, $guid);
index 10da7f7708b981d224ca5e98ad1ead50d0d45225..490b61c7c101c3c2db708dff50406ace2c306e08 100644 (file)
@@ -184,6 +184,13 @@ sub alloc_image {
     $name = $class->zfs_find_free_diskname($storeid, $scfg, $vmid) if !$name;
     
     $class->zfs_create_zvol($scfg, $name, $size);
+    run_command ("udevadm trigger --subsystem-match block");
+    run_command ("udevadm settle --timeout 5");
+    
+    for (1..10) {
+       last if -e "/dev/zvol/$scfg->{pool}/$name" ;
+       Time::HiRes::usleep(100);
+    }
 
     return $name;
 }