[pve-devel] [PATCH] add scsi-block detection

Dietmar Maurer dietmar at proxmox.com
Fri Mar 16 11:18:22 CET 2012


And such multipath device works with the scsi-block driver (you tested that)?

- Dietmar

> -----Original Message-----
> From: pve-devel-bounces at pve.proxmox.com [mailto:pve-devel-
> bounces at pve.proxmox.com] On Behalf Of Derumier Alexandre
> Sent: Freitag, 16. März 2012 08:57
> To: pve-devel at pve.proxmox.com
> Subject: [pve-devel] [PATCH] add scsi-block detection
> 
> 
> Signed-off-by: Derumier Alexandre <aderumier at odiso.com>
> ---
>  PVE/QemuServer.pm |   48
> +++++++++++++++++++++++++++++++++++++++++++++---
>  1 files changed, 45 insertions(+), 3 deletions(-)
> 
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index
> 3991606..13a7852 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -25,6 +25,7 @@ use PVE::Cluster qw(cfs_register_file cfs_read_file
> cfs_write_file cfs_lock_file  use PVE::INotify;  use PVE::ProcFSTools;  use
> Time::HiRes qw(gettimeofday);
> +use Unix::Mknod qw(:all);
> 
>  my $cpuinfo = PVE::ProcFSTools::read_cpuinfo();
> 
> @@ -904,9 +905,8 @@ sub print_drivedevice_full {
>                } else {
>                    $path = PVE::Storage::path($storecfg, $drive->{file});
>                }
> -              if ($path =~ m|^/dev/| ) {
> -                  $devicetype = 'block';
> -              }
> +
> +	      $devicetype = 'block' if path_is_scsi($path);
>           }
> 
>  	$device = "scsi-$devicetype,bus=lsi$controller.0,scsi-
> id=$unit,drive=drive-$drive->{interface}$drive->{index},id=$drive-
> >{interface}$drive->{index}";
> @@ -2904,6 +2904,48 @@ sub vm_stopall {
>      print $msg;
>  }
> 
> +sub path_is_scsi {
> +    my ($path) = @_;
> +
> +    return if ($path !~ m|^/dev/|);
> +
> +    my $bdev = undef;
> +    #if path is /dev/xxx
> +    if($path =~ m|^/dev/[^/]+/?$|) {
> +        $bdev = $path;
> +    }
> +    #if path is /dev/disk/
> +    elsif ($path =~ m|^/dev/disk/|) {
> +        $bdev = readlink($path);
> +        #if multipath, we need to find real device
> +        if($bdev =~ m/(dm-(\d+))$/) {
> +            my $dir="/sys/block/$1/slaves/";
> +            my $dh = IO::Dir->new ($dir);
> +            if (defined $dh) {
> +                while (defined(my $tmp = $dh->read)) {
> +                    if ($tmp =~ m/([0-9A-Za-z])$/) {
> +                        $bdev="/dev/$tmp";
> +                    }
> +                }
> +            }
> +        }
> +        elsif ($bdev =~ m/(\w+)/) {
> +            $bdev="/dev/$1";
> +        }
> +    }
> +
> +    return if !$bdev;
> +
> +    my $st=stat($bdev);
> +    my $major=Unix::Mknod::major($st->rdev);
> +
> +    if ($major =~ m/^(\d+)$/) {
> +        $major = $1;
> +        my @scsimajors =
> (8,65,66,67,68,69,70,71,128,129,130,131,132,133,134,135);
> +        return 1 if (grep /^$major$/, @scsimajors)
> +    }
> +}
> +
>  # pci helpers
> 
>  sub file_write {
> --
> 1.7.2.5
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel





More information about the pve-devel mailing list