From 74b7bd702790a02b44e0a8e2be3a8c2ced994ea4 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Wed, 30 May 2007 11:13:29 +0000 Subject: - fix detecting usb drives (#13395) (backport from trunk) --- perl-install/install/NEWS | 2 ++ perl-install/modules.pm | 26 ++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/perl-install/install/NEWS b/perl-install/install/NEWS index 347b266e5..9ebf87867 100644 --- a/perl-install/install/NEWS +++ b/perl-install/install/NEWS @@ -1,3 +1,5 @@ +- fix detecting usb drives (#13395) + Version 10.4.128 - 3 April 2007, by Pascal "Pixel" Rigaux - don't configure /etc/kde/kdm/kdmrc if it doesn't exist diff --git a/perl-install/modules.pm b/perl-install/modules.pm index 6ba7b3ee2..e0492c086 100644 --- a/perl-install/modules.pm +++ b/perl-install/modules.pm @@ -55,6 +55,21 @@ sub module_is_available { find { m!/\Q$module\E\.k?o! } cat_($::prefix . '/lib/modules/' . c::kernel_version() . '/modules.dep'); } +sub post_2007_1_fuzzy_pidofs { + my ($regexp) = @_; + grep { + if (/^(\d+)$/) { + my $s = MDK::Common::File::cat_("/proc/$_/cmdline") || + readlink("/proc/$_/exe") || + MDK::Common::File::cat_("/proc/$_/stat") =~ /\s(\S+)/ && $1 || + ''; + $s =~ /$regexp/; + } else { + 0; + } + } MDK::Common::File::all('/proc'); +} + #-############################################################################### #- module loading #-############################################################################### @@ -75,11 +90,14 @@ sub load_raw { } elsif (member('usb-storage', @$l)) { #- usb-storage is only modprobed when we know there is some scsi devices #- so trying hard to wait for devices to be detected - my $retry = 10; - sleep 1; #- TOREMOVE for compatibility with previous behaviour: wait at least 2 seconds - while ($retry--) { + + #- first sleep the minimum time usb-stor-scan takes + sleep 5; #- 5 == /sys/module/usb_storage/parameters/delay_use + # then wait for usb-stor-scan to complete + my $retry = 0; + while ($retry++ < 10) { + post_2007_1_fuzzy_pidofs('usb-stor-scan') or last; sleep 1; - last if all('/sys/bus/scsi/devices'); log::l("waiting for usb-storage devices to appear (retry = $retry)"); } } -- cgit v1.2.1