From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 8AA6972371 for ; Mon, 23 May 2022 12:54:27 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7E2CCA975 for ; Mon, 23 May 2022 12:54:27 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id E1C35A96B for ; Mon, 23 May 2022 12:54:26 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id B151B42A45 for ; Mon, 23 May 2022 12:54:26 +0200 (CEST) From: Aaron Lauterer To: pve-devel@lists.proxmox.com Date: Mon, 23 May 2022 12:54:25 +0200 Message-Id: <20220523105425.3025242-1-a.lauterer@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.006 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH storage] rbd: get_rbd_dev_path: return /dev/rbd path only if cluster matches X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 May 2022 10:54:27 -0000 The changes in cfe46e2d4a97a83f1bbe6ad656e6416399309ba2 git not catch all situations. In the case of a guest having 2 disk images with the same name on a pool with the same name but in two different ceph clusters we still had issues when starting it. The first disk got mapped as expected. The second disk did not get mapped because we returned the old $path to "/dev/rbd//" because it already existed from the first disk. In the case that only the "old" /dev/rbd path exists and we do not have the /dev/rbd-pve//... path available, we now check if the cluster fsid used by that rbd device matches the one we expect. If it does, then we are in the situation that the image has been mapped before the new rbd-pve udev rule was introduced. If it does not, then we have the situation of an ambiguous mapping in /dev/rbd and return the $pve_path. Signed-off-by: Aaron Lauterer --- PVE/Storage/RBDPlugin.pm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm index 3511914..eeeaf3f 100644 --- a/PVE/Storage/RBDPlugin.pm +++ b/PVE/Storage/RBDPlugin.pm @@ -3,6 +3,7 @@ package PVE::Storage::RBDPlugin; use strict; use warnings; +use Cwd qw(abs_path); use IO::File; use JSON; use Net::IP; @@ -13,7 +14,7 @@ use PVE::JSONSchema qw(get_standard_option); use PVE::ProcFSTools; use PVE::RADOS; use PVE::Storage::Plugin; -use PVE::Tools qw(run_command trim); +use PVE::Tools qw(run_command trim file_read_firstline); use base qw(PVE::Storage::Plugin); @@ -66,7 +67,13 @@ my sub get_rbd_dev_path { my $pve_path = "/dev/rbd-pve/${cluster_id}/${rbd_path}"; my $path = "/dev/rbd/${rbd_path}"; - return $path if !-e $pve_path && -e $path; # mapped before rbd-pve udev rule existed + if (!-e $pve_path && -e $path) { + # possibly mapped before rbd-pve rule existed + my $real_dev = abs_path($path); + my ($rbd_id) = ($real_dev =~ m|/dev/rbd([0-9]+)$|); + my $dev_cluster_id = file_read_firstline("/sys/devices/rbd/${rbd_id}/cluster_fsid"); + return $path if $cluster_id eq $dev_cluster_id; + } return $pve_path; } -- 2.30.2