summaryrefslogtreecommitdiffstats
path: root/perl-install/detect_devices.pm
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2003-02-19 14:03:19 +0000
committerPascal Rigaux <pixel@mandriva.com>2003-02-19 14:03:19 +0000
commit64ee3f84430652de3e3c24d9a0c91a1c29d1dd37 (patch)
treefc8379330a3c9a4ef13319d18000ffa255b95dd2 /perl-install/detect_devices.pm
parentb0b1c6146ae1dab13cc791f521b1634a08bdb2ee (diff)
downloaddrakx-64ee3f84430652de3e3c24d9a0c91a1c29d1dd37.tar
drakx-64ee3f84430652de3e3c24d9a0c91a1c29d1dd37.tar.gz
drakx-64ee3f84430652de3e3c24d9a0c91a1c29d1dd37.tar.bz2
drakx-64ee3f84430652de3e3c24d9a0c91a1c29d1dd37.tar.xz
drakx-64ee3f84430652de3e3c24d9a0c91a1c29d1dd37.zip
- cleanup & simplify
- handle raid on raid detection
Diffstat (limited to 'perl-install/detect_devices.pm')
-rw-r--r--perl-install/detect_devices.pm24
1 files changed, 16 insertions, 8 deletions
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm
index 62e03e87d..e77b36090 100644
--- a/perl-install/detect_devices.pm
+++ b/perl-install/detect_devices.pm
@@ -632,11 +632,18 @@ sub raidAutoStartRaidtab {
#- faking a raidtab, it seems to be working :-)))
#- (choosing any inactive md)
raid::inactivate_all();
- foreach (@parts) {
- my $nb = find { !raid::is_active("md$_") } 0 .. raid::max_nb();
- output("/tmp/raidtab", "raiddev /dev/md$nb\n device " . devices::make($_->{device}) . "\n");
- run_program::run('raidstart', '-c', "/tmp/raidtab", devices::make("md$nb"));
- }
+ my $detect_one = sub {
+ my ($device) = @_;
+ my $free_md = devices::make(find { !raid::is_active($_) } map { "md$_" } 0 .. raid::max_nb());
+ output("/tmp/raidtab", "raiddev $free_md\n device " . devices::make($device) . "\n");
+ log::l("raidAutoStartRaidtab: trying $device");
+ run_program::run('raidstart', '-c', "/tmp/raidtab", $free_md);
+ };
+ $detect_one->($_->{device}) foreach @parts;
+
+ #- try again to detect RAID 10
+ $detect_one->($_) foreach raid::active_mds();
+
unlink "/tmp/raidtab";
}
@@ -647,9 +654,10 @@ sub raidAutoStart {
eval { modules::load('md') };
my %personalities = ('1' => 'linear', '2' => 'raid0', '3' => 'raid1', '4' => 'raid5');
raidAutoStartIoctl() or raidAutoStartRaidtab(@parts);
- if (my @needed_perso = map {
- if_(/^kmod: failed.*md-personality-(.)/ ||
- /^md: personality (.) is not loaded/, $personalities{$1}) } syslog()) {
+ foreach (1..2) { #- try twice for RAID 10
+ my @needed_perso = map {
+ if_(/^kmod: failed.*md-personality-(.)/ ||
+ /^md: personality (.) is not loaded/, $personalities{$1}) } syslog() or last;
eval { modules::load(@needed_perso) };
raidAutoStartIoctl() or raidAutoStartRaidtab(@parts);
}