From eb89269f2e908f267900b65f8a32902a3c98d5d0 Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Thu, 26 Sep 2019 17:27:01 +0200 Subject: [PATCH] LIO: Prefix backstores with the pool name So it won't clash with another backstore in another pool Signed-off-by: Daniel Berteaud --- PVE/Storage/LunCmd/LIO.pm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/PVE/Storage/LunCmd/LIO.pm b/PVE/Storage/LunCmd/LIO.pm index 2fd3181..122c203 100644 --- a/PVE/Storage/LunCmd/LIO.pm +++ b/PVE/Storage/LunCmd/LIO.pm @@ -168,6 +168,14 @@ my $parser = sub { } }; +# Get prefix for backstores +my $get_backstore_prefix = sub { + my ($scfg) = @_; + my $pool = $scfg->{pool}; + $pool =~ s/\//-/g; + return $pool . '-'; +}; + # removes the given lu_name from the local list of luns my $free_lu_name = sub { my ($scfg, $lu_name) = @_; @@ -206,6 +214,16 @@ my $extract_volname = sub { my $base = get_base; if ($lunpath =~ /^$base\/$scfg->{pool}\/([\w\-]+)$/) { $volname = $1; + my $prefix = $get_backstore_prefix->($scfg); + my $target = $get_target_settings->($scfg); + foreach my $lun (@{$target->{luns}}) { + # If we have a lun with the pool prefix matching this vol, then return this one + # like pool-pve-vm-100-disk-0 + # Else, just fallback to the old name scheme which is vm-100-disk-0 + if ($lun->{storage_object} =~ /^$BACKSTORE\/($prefix$volname)$/) { + return $1; + } + } } return $volname; @@ -259,6 +277,9 @@ my $create_lun = sub { my $device = $params[0]; my $volname = $extract_volname->($scfg, $device); + # Here we create a new device, so we didn't get the volname prefixed with the pool name + # as extract_volname couldn't find a matching vol yet + $volname = $get_backstore_prefix->($scfg) . $volname; my $tpg = $scfg->{lio_tpg} || die "Target Portal Group not set, aborting!\n"; # step 1: create backstore for device