Am 04/19/2018 um 08:39 AM schrieb Wolfgang Link:
`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 | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
index e864a58..9680a94 100644
--- a/PVE/Storage/ZFSPoolPlugin.pm
+++ b/PVE/Storage/ZFSPoolPlugin.pm
@@ -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);
note: this isn't interrupt safe and may actually sleep less
as we have quite a few such constructs in our code base it
could make sense to add a helper doing this correctly to PVE::Tools
and replace the various, often not ideal, implementations of this...
+ }
} elsif ( $fmt eq 'subvol') {
die "illegal name '$volname' - sould be 'subvol-$vmid-*'\n"
applied both storage patches, will try to address the note above soon :)
_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel