From 1f390a3030ac3cef55b9335d471b118bd5b63178 Mon Sep 17 00:00:00 2001 From: Wolfgang Link Date: Fri, 6 Mar 2015 09:38:30 +0100 Subject: [PATCH] fix bug #602: now zfs will wait 5 sec if error msg is "dataset is busy" Signed-off-by: Wolfgang Link --- PVE/Storage/ZFSPoolPlugin.pm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm index b9b3bf0..39fc348 100644 --- a/PVE/Storage/ZFSPoolPlugin.pm +++ b/PVE/Storage/ZFSPoolPlugin.pm @@ -166,7 +166,7 @@ sub zfs_request { $msg .= "$line\n"; }; - run_command($cmd, outfunc => $output, timeout => $timeout); + run_command($cmd, errmsg => "zfs error", outfunc => $output, timeout => $timeout); return $msg; } @@ -293,7 +293,23 @@ sub zfs_create_zvol { sub zfs_delete_zvol { my ($class, $scfg, $zvol) = @_; - $class->zfs_request($scfg, undef, 'destroy', '-r', "$scfg->{pool}/$zvol"); + my $err; + + for (my $i = 0; $i < 6; $i++) { + + eval { $class->zfs_request($scfg, undef, 'destroy', '-r', "$scfg->{pool}/$zvol"); }; + if ($err = $@) { + if ($err =~ m/^zfs error:(.*): dataset is busy.*/) { + sleep(1); + } else { + die $err; + } + } else { + last; + } + } + + die $err if $err; } sub zfs_list_zvol {