[pve-devel] r5779 - in pve-storage/pve2: . PVE
svn-commits at proxmox.com
svn-commits at proxmox.com
Mon Apr 4 07:15:21 CEST 2011
Author: dietmar
Date: 2011-04-04 07:15:21 +0200 (Mon, 04 Apr 2011)
New Revision: 5779
Modified:
pve-storage/pve2/ChangeLog
pve-storage/pve2/PVE/Storage.pm
Log:
Modified: pve-storage/pve2/ChangeLog
===================================================================
--- pve-storage/pve2/ChangeLog 2011-04-04 04:59:38 UTC (rev 5778)
+++ pve-storage/pve2/ChangeLog 2011-04-04 05:15:21 UTC (rev 5779)
@@ -1,3 +1,8 @@
+2011-04-04 Proxmox Support Team <support at proxmox.com>
+
+ * PVE/Storage.pm (load_stable_scsi_paths): only load
+ /dev/disk/by-id once (avoid delays when we have many disks)
+
2011-03-09 Proxmox Support Team <support at proxmox.com>
* pvesm (status): report sizes like 'df'
Modified: pve-storage/pve2/PVE/Storage.pm
===================================================================
--- pve-storage/pve2/PVE/Storage.pm 2011-04-04 04:59:38 UTC (rev 5778)
+++ pve-storage/pve2/PVE/Storage.pm 2011-04-04 05:15:21 UTC (rev 5779)
@@ -51,51 +51,30 @@
return 1;
}
-sub link_points_to {
- my ($src, $dest) = @_;
+sub load_stable_scsi_paths {
- my $st1 = stat ($src);
- my $st2 = stat ($dest);
+ my $stable_paths = {};
- return 0 if !$st1 || !$st2;
+ my $stabledir = "/dev/disk/by-id";
- return $st1->ino == $st2->ino && $st1->dev == $st2->dev;
-}
-
-sub find_stable_path {
- my ($stabledir, $bdev) = @_;
-
- my $dh = IO::Dir->new ($stabledir);
- if ($dh) {
- while (defined(my $tmp = $dh->read)) {
- my $path = "$stabledir/$tmp";
- if (link_points_to ($path, $bdev)) {
- return wantarray ? ($path, $tmp) : $path;
- }
- }
-
- $dh->close;
+ if (my $dh = IO::Dir->new($stabledir)) {
+ while (defined(my $tmp = $dh->read)) {
+ # exclude filenames with part in name (same disk but partitions)
+ # use only filenames with scsi(with multipath i have the same device
+ # with dm-uuid-mpath , dm-name and scsi in name)
+ if($tmp !~ m/-part\d+$/ && $tmp =~ m/^scsi-/) {
+ my $path = "$stabledir/$tmp";
+ my $bdevdest = readlink($path);
+ if ($bdevdest && $bdevdest =~ m|^../../([^/]+)|) {
+ $stable_paths->{$1}=$tmp;
+ }
+ }
+ }
+ $dh->close;
}
-
- return wantarray ? () : undef;
+ return $stable_paths;
}
-sub find_dev_by_id {
- my $bdev = shift;
-
- my ($full_path, $name) = find_stable_path ("/dev/disk/by-id", $bdev);
-
- return $name;
-}
-
-sub find_dev_by_path {
- my $bdev = shift;
-
- my ($full_path, $name) = find_stable_path ("/dev/disk/by-path", $bdev);
-
- return $name;
-}
-
sub dir_glob_regex {
my ($dir, $regex) = @_;
@@ -820,6 +799,8 @@
my $dirname = '/sys/class/iscsi_session';
+ my $stable_paths = load_stable_scsi_paths();
+
dir_glob_foreach ($dirname, 'session(\d+)', sub {
my ($ent, $session) = @_;
@@ -843,7 +824,7 @@
}
return if !$bdev;
- my $blockdev = find_dev_by_id ("/dev/$bdev");
+ my $blockdev = $stable_paths->{$bdev};
return if !$blockdev;
my $size = file_read_firstline ("/sys/block/$bdev/size");
More information about the pve-devel
mailing list