Changeset 768
- Timestamp:
- 03/09/07 23:10:10 (2 years ago)
- Files:
-
- trunk/server/mogstored (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/server/mogstored
r767 r768 436 436 437 437 if (lc($^O) eq 'linux') { 438 my %name_to_number; 439 my %number_to_name; 438 # name_to_number and number_to_name are the data derived from /proc/partitions 439 my %name_to_number; # ( hda1 => 769, ... ) 440 my %number_to_name; # ( 769 => hda1, ... ) 440 441 441 442 if (open my $partitions, '<', '/proc/partitions') { 442 443 <$partitions>; <$partitions>; # First two lines are for humans 443 444 while (my $line = <$partitions>) { 444 my ($major, $minor, $devname) = $line =~445 m/^ \s* (\d+) \s+ (\d+) \s+ \d+ \s+ (\S+) \s* $/x;445 next unless $line =~ m/^ \s* (\d+) \s+ (\d+) \s+ \d+ \s+ (\S+) \s* $/x; 446 my ($major, $minor, $devname) = ($1, $2, $3); 446 447 my $devno = ($major << 8) + $minor; 447 448 $name_to_number{$devname} = $devno; … … 452 453 } 453 454 455 # Iterate over the hash { 1 => 768 } meaning (mogile device dev1 points to os device 768) 454 456 foreach my $mogdevid (keys %$map) { 457 # Look up the original device number 455 458 my $original = $map->{$mogdevid}; 459 460 # See if there is a mapping to turn it into a device name (eg. hda1) 456 461 my $devname = $number_to_name{$original} or next; 457 if (my ($new) = $devname =~ m/^([hs]d\w)\d+$/) { 458 next unless $name_to_number{$new}; 459 $map->{$mogdevid} = $name_to_number{$new}; 462 463 # Pull off the new device name with a regex 464 if (my ($newname) = $devname =~ m/^([hs]d\w)\d+$/) { 465 # Skip if we can't map it back to a device number 466 my $newnum = $name_to_number{$newname} or next; 467 $map->{$mogdevid} = $newnum; 460 468 } 461 469 }
