[pve-devel] [PATCH V2 storage 2/3] LIO: Prefix backstores with the pool name

Daniel Berteaud daniel at firewall-services.com
Thu Sep 26 17:27:01 CEST 2019


So it won't clash with another backstore in another pool

Signed-off-by: Daniel Berteaud <daniel at firewall-services.com>
---
 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
-- 
2.21.0





More information about the pve-devel mailing list