From 52a064afcd47f559d90166627f794f681a2e4cbd Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Tue, 4 Jun 2019 12:35:22 +0200 Subject: [PATCH] Diskmanage: allow get_disks to take multiple disks we now expect the first parameter to be either a string with a single disk, or an array ref with a list of disks this way we can get the info of multiple disks simultaneously while not iterating over all disks this will be used to get the info for osd/db/wal disk Signed-off-by: Dominik Csapak --- PVE/Diskmanage.pm | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm index a7a7e70..281b378 100644 --- a/PVE/Diskmanage.pm +++ b/PVE/Diskmanage.pm @@ -416,7 +416,7 @@ sub is_iscsi { } sub get_disks { - my ($disk, $nosmart) = @_; + my ($disks, $nosmart) = @_; my $disklist = {}; my $mounted = {}; @@ -440,14 +440,21 @@ sub get_disks { my $lvmlist = get_lvm_devices(); - # we get cciss/c0d0 but need cciss!c0d0 - if (defined($disk) && $disk =~ m|^cciss/|) { - $disk =~ s|cciss/|cciss!|; + my $disk_regex = ".*"; + if (defined($disks)) { + if (!ref($disks)) { + $disks = [ $disks ]; + } elsif (ref($disks) ne 'ARRAY') { + die "disks is not a string or array reference\n"; + } + # we get cciss/c0d0 but need cciss!c0d0 + map { s|cciss/|cciss!| } @$disks; + + $disk_regex = "(?:" . join('|', @$disks) . ")"; } - dir_glob_foreach('/sys/block', '.*', sub { + dir_glob_foreach('/sys/block', $disk_regex, sub { my ($dev) = @_; - return if defined($disk) && $disk ne $dev; # whitelisting following devices # hdX: ide block device # sdX: sd block device -- 2.39.2