[pve-devel] [PATCH_V3] Bug Fix 602
Wolfgang Link
w.link at proxmox.com
Thu Mar 5 21:04:40 CET 2015
now zfs will wait 5 sec if error msg is "dataset is busy"
Signed-off-by: Wolfgang Link <w.link at proxmox.com>
---
PVE/Storage/ZFSPoolPlugin.pm | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
index 5cbd1b2..999e43e 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 => "ERROR", outfunc => $output, timeout => $timeout);
return $msg;
}
@@ -291,7 +291,26 @@ sub zfs_create_zvol {
sub zfs_delete_zvol {
my ($class, $scfg, $zvol) = @_;
- $class->zfs_request($scfg, undef, 'destroy', '-r', "$scfg->{pool}/$zvol");
+ my $ret;
+ eval {$ret = $class->zfs_request($scfg, undef, 'destroy', '-r', "$scfg->{pool}/$zvol");};
+ $ret = $@ if $@;
+
+ if ($ret =~ m/^ERROR:(.*)/) {
+
+ if ($ret =~ m/.*: dataset is busy.*/){
+
+ for(my $i = 0; $ret && $i < 5; $i++){
+ sleep(1);
+
+ eval {$ret = $class->zfs_request($scfg, undef, 'destroy', '-r', "$scfg->{pool}/$zvol");};
+ $ret = $@ if $@;
+ }
+
+ die $ret if $ret;
+ } else {
+ die "$ret";
+ }
+ }
}
sub zfs_list_zvol {
--
1.7.10.4
More information about the pve-devel
mailing list