Here is a new[1] proposal, which leads IMHO to
a) cleaner code
b) better logging
I have split the patch into several steps,
for making it better understandable.
Please comment, especially if you not agree...
bye, Bastian
[1] https://lists.openwrt.org/pipermail/openwrt-devel/2011-January/009171.html
From 05b8f53587baea4aa246eda6cddf5e88b9b4bf7e Mon Sep 17 00:00:00 2001
From: Bastian Bittorf <bitt...@bluebottle.com>
Date: Mon, 19 Sep 2011 16:57:17 +0200
Subject: [PATCH 1/5] cleanup: we don't need to pass a path/filelist to a function, if it's hardcoded there anyway
---
package/base-files/files/etc/init.d/boot | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot
index 2fec48c..ab8eb29 100755
--- a/package/base-files/files/etc/init.d/boot
+++ b/package/base-files/files/etc/init.d/boot
@@ -83,7 +83,7 @@ start() {
[ -n "$rootdev" ] && ln -s "$rootdev" /dev/root
}
- load_modules /etc/modules.d/*
+ load_modules
# another round of USB coldplugging to kick devices into operation which lacked drivers before
for dev in /sys/bus/usb/devices/*/uevent; do
--
1.7.1
From 824d9768c6523311bdd45621b5dde843a1a33920 Mon Sep 17 00:00:00 2001
From: Bastian Bittorf <bitt...@bluebottle.com>
Date: Mon, 19 Sep 2011 17:11:05 +0200
Subject: [PATCH 2/5] cleanup: use -ash builtins to iterate through list of files and insmod the content. we don't need to check, if the dir exists or is filled, if there are no files it simply does not nothing. my internal benchmarks has shown, that there is a speed-difference for old and newstyle by 50 milliseconds for 2000 kernelmodules - so it doesnt matter
---
package/base-files/files/etc/functions.sh | 17 +++++++++++++----
1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh
index e4b3bad..17d4189 100755
--- a/package/base-files/files/etc/functions.sh
+++ b/package/base-files/files/etc/functions.sh
@@ -206,10 +206,19 @@ config_list_foreach() {
}
load_modules() {
- [ -d /etc/modules.d ] && {
- cd /etc/modules.d
- sed 's/^[^#]/insmod &/' $* | ash 2>&- || :
- }
+ local file line
+
+ for file in /etc/modules.d/* ; do
+ while read line ; do
+ case "$line" in
+ "#"*|"")
+ ;;
+ *)
+ insmod $line
+ ;;
+ esac
+ done <$file
+ done
}
include() {
--
1.7.1
From fc6f2b275f7e67a1f28216959a8ac93cf8460b97 Mon Sep 17 00:00:00 2001
From: Bastian Bittorf <bitt...@bluebottle.com>
Date: Mon, 19 Sep 2011 17:18:18 +0200
Subject: [PATCH 3/5] logging: if insmod'ing fails we push this to syslog. this is far better, than the oldstyle where we had no feedback at all
---
package/base-files/files/etc/functions.sh | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh
index 17d4189..0b5b1ff 100755
--- a/package/base-files/files/etc/functions.sh
+++ b/package/base-files/files/etc/functions.sh
@@ -214,7 +214,7 @@ load_modules() {
"#"*|"")
;;
*)
- insmod $line
+ insmod $line 2>&1 | logger -t "load_modules()" -p kern.err
;;
esac
done <$file
--
1.7.1
From 9d4d16a91ed5148745a149fea9775e9f739a24c9 Mon Sep 17 00:00:00 2001
From: Bastian Bittorf <bitt...@bluebottle.com>
Date: Mon, 19 Sep 2011 17:21:17 +0200
Subject: [PATCH 4/5] cleanup: it's shorter and maybe better readable, but relies on the fact, that kernel-modules (name) begin with a letter
---
package/base-files/files/etc/functions.sh | 4 +---
1 files changed, 1 insertions(+), 3 deletions(-)
diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh
index 0b5b1ff..5fb1808 100755
--- a/package/base-files/files/etc/functions.sh
+++ b/package/base-files/files/etc/functions.sh
@@ -211,9 +211,7 @@ load_modules() {
for file in /etc/modules.d/* ; do
while read line ; do
case "$line" in
- "#"*|"")
- ;;
- *)
+ [a-zA-Z]*)
insmod $line 2>&1 | logger -t "load_modules()" -p kern.err
;;
esac
--
1.7.1
From 16083b26b87a49c66aac442fd911322f203745ba Mon Sep 17 00:00:00 2001
From: Bastian Bittorf <bitt...@bluebottle.com>
Date: Mon, 19 Sep 2011 17:23:46 +0200
Subject: [PATCH 5/5] cleanup: rename the function to make it clear, that we attempt to load kernel_modules and not just another port or openwrt
---
package/base-files/files/etc/functions.sh | 2 +-
package/base-files/files/etc/init.d/boot | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/package/base-files/files/etc/functions.sh b/package/base-files/files/etc/functions.sh
index 5fb1808..1cb1667 100755
--- a/package/base-files/files/etc/functions.sh
+++ b/package/base-files/files/etc/functions.sh
@@ -205,7 +205,7 @@ config_list_foreach() {
done
}
-load_modules() {
+load_kernelmodules() {
local file line
for file in /etc/modules.d/* ; do
diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot
index ab8eb29..9a93fe6 100755
--- a/package/base-files/files/etc/init.d/boot
+++ b/package/base-files/files/etc/init.d/boot
@@ -83,7 +83,7 @@ start() {
[ -n "$rootdev" ] && ln -s "$rootdev" /dev/root
}
- load_modules
+ load_kernelmodules
# another round of USB coldplugging to kick devices into operation which lacked drivers before
for dev in /sys/bus/usb/devices/*/uevent; do
--
1.7.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel