From: Michael Rasmussen <m...@datanom.net> Signed-off-by: Michael Rasmussen <m...@datanom.net> --- PVE/Storage/FreeNASPlugin.pm | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-)
diff --git a/PVE/Storage/FreeNASPlugin.pm b/PVE/Storage/FreeNASPlugin.pm index 3a18a31..91a1b0c 100644 --- a/PVE/Storage/FreeNASPlugin.pm +++ b/PVE/Storage/FreeNASPlugin.pm @@ -534,24 +534,37 @@ my $freenas_get_lun_number = sub { $lunid = $2 - 1; } elsif ($volname =~ /^vm-(\d+)-state/) { # Find id for temporary LUN + my %used_luns; my $target = $freenas_get_target->($scfg, $1); - my $id = $max_luns; my $t2extents = $freenas_request->($scfg, 'GET', "services/iscsi/targettoextent/"); + # Looking for existing LUN + my $eid = $freenas_get_extent->($scfg, $volname); + foreach my $t2extent (@$t2extents) { + die "Max snapshots ($active_snaps) is reached\n" + unless keys %used_luns < $active_snaps; + next unless $t2extent->{iscsi_target} == $target && $t2extent->{iscsi_lunid} + 1 > $max_luns && $t2extent->{iscsi_lunid} < $max_luns + $active_snaps; - my $eid = $freenas_get_extent->($scfg, $volname); - if ($eid) { - my $extent = $freenas_request->($scfg, 'GET', "services/iscsi/extent/$eid/"); - # Request to get lunid for an existing lun - last if $t2extent->{iscsi_extent} eq $eid; + + if (defined $eid && $t2extent->{iscsi_extent} == $eid) { + $lunid = $t2extent->{iscsi_lunid}; + last; } - $id++; + + $used_luns{$t2extent->{iscsi_lunid}} = $t2extent; } - die "Max snapshots ($active_snaps) is reached\n" unless ($id - $max_luns) < $active_snaps; - $lunid = $id; + + do { + if (%used_luns) { + my @ids = sort { $a <=> $b } keys %used_luns; + $lunid = $ids[-1] + 1; + } else { + $lunid = $max_luns; + } + } unless $lunid; } elsif ($volname =~ /^(vm|base)-\d+-disk-\d+\@vzdump$/) { # Required to be able to exposed read-only LUNs for snapshot backup CT $lunid = $max_luns + $active_snaps; -- 2.11.0 ---- This mail was virus scanned and spam checked before delivery. This mail is also DKIM signed. See header dkim-signature. _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel