]> git.proxmox.com Git - pve-storage.git/commitdiff
fix #1691: replace udev check
authorWolfgang Link <w.link@proxmox.com>
Thu, 19 Apr 2018 06:39:50 +0000 (08:39 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 7 May 2018 10:01:20 +0000 (12:01 +0200)
`zfs create` add the creation job in a worker queue,
which should normally execute instantly. But there are circumstances
where the job will take a while to get processed.
If this is the case udev settle will see no dev in the queue and the program
will continue without an allocated dev.

The busy waiting is not best practice but the only way to be sure,
that the block device exists.

PVE/Storage/ZFSPoolPlugin.pm

index e864a58a980ed77bb788f4efa69c6f6208d5f911..9680a94822d3d4f1081ed72e885c3a66216ccd05 100644 (file)
@@ -211,9 +211,14 @@ sub alloc_image {
        $class->zfs_create_zvol($scfg, $volname, $size);
        my $devname = "/dev/zvol/$scfg->{pool}/$volname";
 
-       run_command("udevadm trigger --subsystem-match block");
-       system('udevadm', 'settle', '--timeout', '10', "--exit-if-exists=${devname}");
+       my $timeout = 10;
+       for (my $i = 1; $i <= $timeout; $i++) {
+           last if -b $devname;
+           die "Timeout: no zvol after $timeout sec found.\n"
+               if $i == $timeout;
 
+           sleep(1);
+       }
     } elsif ( $fmt eq 'subvol') {
 
        die "illegal name '$volname' - sould be 'subvol-$vmid-*'\n"