public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  2013-06-09 13:48 ` [gentoo-commits] proj/genkernel:master " Richard Yao
  0 siblings, 1 reply; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     a21728ae287e988a1848435ab27f7ab503def784
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:40:07 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:47:39 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=a21728ae

Add call_func_timeout helper function

call_func_timeout permits us to call a helper function and kill it
should it exceed some timeout. This is derived from example code posted
on Stack Overflow:

http://stackoverflow.com/a/11056286

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..bfdde75 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,22 @@
 
 . /etc/initrd.defaults
 
+call_func_timeout()
+{
+	local func=$1 timeout=$2 pid watcher
+	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
+
+	( ${func} ) & pid=$!
+	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
+	if wait ${pid} 2>/dev/null; then
+	    kill -HUP $watcher 2> /dev/null
+	    wait $watcher 2>/dev/null
+	    return 1
+	fi
+
+	return 0
+}
+
 modules_load() {
 	for module in $*
 	do


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-10-02 12:43 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-10-02 12:43 UTC (permalink / raw
  To: gentoo-commits

commit:     7f988ea77debe3f5d0627568584af60a4625f251
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 21 15:18:54 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Wed Aug 21 15:18:54 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=7f988ea7

Add exit 1 to waitForZFS

Proper use of call_func_timeout() requires that we return an exit status
of 1 upon success.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index cb0fcb8..4b7c5ba 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -641,6 +641,7 @@ chooseKeymap() {
 # This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
 	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
+	exit 1
 }
 
 startVolumes() {


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     62bd9ecc16d0875257c22c7b8f68b73452e9cb80
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Jun  9 13:32:25 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:56:25 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=62bd9ecc

Add more module loading features

These additional features were suggested by Fabio in bug #472312.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 513ff0b..da260a8 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -495,7 +495,7 @@ CONFIG_RMMOD=y
 CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
 CONFIG_MODPROBE=y
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
 CONFIG_DEPMOD=y
 
 #
@@ -508,9 +508,9 @@ CONFIG_DEPMOD=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     85bf0efd762b167c5b47e2fd064bcd536bf98ad7
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:55:10 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=85bf0efd

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This issue was made clear by commit
c812c35100771bb527f6b03853fa6d8ef66a48fe, which ensured that the zpool
and zfs commands were not run until the ZFS module was loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 35e5957..cb0fcb8 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     6db2bc0f217d2f7b02a49184c489e9f1b469c009
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Jun  9 13:32:25 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:55:30 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=6db2bc0f

Add more module loading features

These additional features were suggested by Fabio in bug #472312.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 513ff0b..da260a8 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -495,7 +495,7 @@ CONFIG_RMMOD=y
 CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
 CONFIG_MODPROBE=y
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
 CONFIG_DEPMOD=y
 
 #
@@ -508,9 +508,9 @@ CONFIG_DEPMOD=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     38a8e4a8d31dbec3af7e623640d536274c7c5f50
Author:     Ben Kohler <bkohler <AT> gmail <DOT> com>
AuthorDate: Sun Jun  9 13:28:23 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:55:30 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=38a8e4a8

Make busybox's module loading more fully featured, bug #472312

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, this caused a regression where
busybox's modprobe fails to properly load certain modules. This can be
addressed by abandoning CONFIG_MODPROBE_SMALL=y. We also set a few other
features to make module loading more fully featured.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..513ff0b 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
+CONFIG_MODPROBE=y
 # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     c812c35100771bb527f6b03853fa6d8ef66a48fe
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:47:39 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=c812c351

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index bfdde75..35e5957 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,7 +720,12 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
+
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout waitForZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
+		elif [ -z "${ZFS_POOL}" ]
 		then
 			good_msg "Importing ZFS pools"
 
@@ -745,9 +756,9 @@ startVolumes() {
 
 				if [ "$?" = '0' ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "Import of ${ZFS_POOL} succeeded"
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					bad_msg "Import of ${ZFS_POOL} failed"
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:master commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  2013-06-09 13:57 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
  0 siblings, 1 reply; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     2fa0a9beaa069a61f907f0b06c9bd6abeddb1ca7
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:56:14 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=2fa0a9be

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This issue was made clear by commit
c812c35100771bb527f6b03853fa6d8ef66a48fe, which ensured that the zpool
and zfs commands were not run until the ZFS module was loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 35e5957..cb0fcb8 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:master commit in: defaults/
@ 2013-06-09 13:57 Richard Yao
  2013-06-09 13:57 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
  0 siblings, 1 reply; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:57 UTC (permalink / raw
  To: gentoo-commits

commit:     987bb3098e81c43e8aaf2a02830508acb801ac0c
Author:     Ben Kohler <bkohler <AT> gmail <DOT> com>
AuthorDate: Sun Jun  9 13:28:23 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:56:25 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=987bb309

Make busybox's module loading more fully featured, bug #472312

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, this caused a regression where
busybox's modprobe fails to properly load certain modules. This can be
addressed by abandoning CONFIG_MODPROBE_SMALL=y. We also set a few other
features to make module loading more fully featured.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..513ff0b 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
+CONFIG_MODPROBE=y
 # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:master commit in: defaults/
@ 2013-06-09 13:48 Richard Yao
  2013-06-09 13:57 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
  0 siblings, 1 reply; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:48 UTC (permalink / raw
  To: gentoo-commits

commit:     c2da0c02efadf7d3b70f71ed2acb53ad4e735a75
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:47:39 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=c2da0c02

Refactor ZFS module load hook

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..3784456 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,16 +298,17 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
-	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
-		USE_ZFS=0
+	for i in /sbin/zfs /sbin/zpool
+	do
+		if [ ! -x ${i} ]
+		then
+			USE_ZFS=0
+			bad_msg 'Aborting use of zfs because ${i} not found!'
+			break
+		fi
+	done
 
-		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
-		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
-		bad_msg 'Aborting use of zfs!'
-	fi
+	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:40 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:40 UTC (permalink / raw
  To: gentoo-commits

commit:     11d3bde66e76d378cab256fb38f5fac4d8d00738
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:40:07 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:39:57 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=11d3bde6

Add call_func_timeout helper function

call_func_timeout permits us to call a helper function and kill it
should it exceed some timeout. This is derived from example code posted
on Stack Overflow:

http://stackoverflow.com/a/11056286

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..bfdde75 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,22 @@
 
 . /etc/initrd.defaults
 
+call_func_timeout()
+{
+	local func=$1 timeout=$2 pid watcher
+	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
+
+	( ${func} ) & pid=$!
+	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
+	if wait ${pid} 2>/dev/null; then
+	    kill -HUP $watcher 2> /dev/null
+	    wait $watcher 2>/dev/null
+	    return 1
+	fi
+
+	return 0
+}
+
 modules_load() {
 	for module in $*
 	do


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:40 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:40 UTC (permalink / raw
  To: gentoo-commits

commit:     c157dbbd68b2277fdaa0c4179ecf5495db861eb9
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:39:57 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=c157dbbd

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index bfdde75..35e5957 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,7 +720,12 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
+
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout waitForZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
+		elif [ -z "${ZFS_POOL}" ]
 		then
 			good_msg "Importing ZFS pools"
 
@@ -745,9 +756,9 @@ startVolumes() {
 
 				if [ "$?" = '0' ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "Import of ${ZFS_POOL} succeeded"
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					bad_msg "Import of ${ZFS_POOL} failed"
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:40 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:40 UTC (permalink / raw
  To: gentoo-commits

commit:     4f38da94eb1dc5f3758a583741eaa5fb1ed3d511
Author:     Ben Kohler <bkohler <AT> gmail <DOT> com>
AuthorDate: Sun Jun  9 13:28:23 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:39:57 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=4f38da94

Make busybox's module loading more fully featured, bug #472312

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, this caused a regression where
busybox's modprobe fails to properly load certain modules. This can be
addressed by abandoning CONFIG_MODPROBE_SMALL=y. We also set a few other
features to make module loading more fully featured.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..513ff0b 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
+CONFIG_MODPROBE=y
 # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:40 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:40 UTC (permalink / raw
  To: gentoo-commits

commit:     440c2c143295d158fbb3614886c0c6f7185bfd6d
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:39:57 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=440c2c14

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This issue was made clear by commit
71d35173727dc968d7baa2107accb99ebbc5b188, which ensured that the zpool
and zfs commands were not run until the ZFS module was loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 35e5957..cb0fcb8 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:40 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:40 UTC (permalink / raw
  To: gentoo-commits

commit:     15471fa1d64ff16f666cea789dab106eb49dd8ed
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Jun  9 13:32:25 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:39:57 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=15471fa1

Add more module loading features

These additional features were suggested by Fabio in bug #472312.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 513ff0b..da260a8 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -495,7 +495,7 @@ CONFIG_RMMOD=y
 CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
 CONFIG_MODPROBE=y
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
 CONFIG_DEPMOD=y
 
 #
@@ -508,9 +508,9 @@ CONFIG_DEPMOD=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:40 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:40 UTC (permalink / raw
  To: gentoo-commits

commit:     a33f93c174b67cb766c2b4af39b02ecb6584a76e
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:39:57 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=a33f93c1

Refactor ZFS module load hook

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..3784456 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,16 +298,17 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
-	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
-		USE_ZFS=0
+	for i in /sbin/zfs /sbin/zpool
+	do
+		if [ ! -x ${i} ]
+		then
+			USE_ZFS=0
+			bad_msg 'Aborting use of zfs because ${i} not found!'
+			break
+		fi
+	done
 
-		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
-		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
-		bad_msg 'Aborting use of zfs!'
-	fi
+	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:37 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:37 UTC (permalink / raw
  To: gentoo-commits

commit:     f554af43673f3ccf680e76e4862365360c5b1c3c
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Jun  9 13:32:25 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:37:10 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=f554af43

Add more module loading features

These additional features were suggested by Fabio in bug #472312.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 513ff0b..da260a8 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -495,7 +495,7 @@ CONFIG_RMMOD=y
 CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
 CONFIG_MODPROBE=y
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
 CONFIG_DEPMOD=y
 
 #
@@ -508,9 +508,9 @@ CONFIG_DEPMOD=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:37 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:37 UTC (permalink / raw
  To: gentoo-commits

commit:     26a6269afc71bc11f0a708337210c48e0576c779
Author:     Ben Kohler <bkohler <AT> gmail <DOT> com>
AuthorDate: Sun Jun  9 13:28:23 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:37:10 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=26a6269a

Make busybox's module loading more fully featured, bug #472312

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, this caused a regression where
busybox's modprobe fails to properly load certain modules. This can be
addressed by abandoning CONFIG_MODPROBE_SMALL=y. We also set a few other
features to make module loading more fully featured.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..513ff0b 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
+CONFIG_MODPROBE=y
 # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:37 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:37 UTC (permalink / raw
  To: gentoo-commits

commit:     2ccc6fc53812d83e458a2e69afdf63cf0c9c449a
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:36:58 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=2ccc6fc5

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This issue was made clear by commit
71d35173727dc968d7baa2107accb99ebbc5b188, which ensured that the zpool
and zfs commands were not run until the ZFS module was loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..73c0f0c 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:36 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:36 UTC (permalink / raw
  To: gentoo-commits

commit:     f9ba19f4d1327abf2b424bb5317b5c18c4726686
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Jun  9 13:32:25 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:35:18 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=f9ba19f4

Add more module loading features

These additional features were suggested by Fabio in bug #472312.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 513ff0b..da260a8 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -495,7 +495,7 @@ CONFIG_RMMOD=y
 CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
 CONFIG_MODPROBE=y
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
 CONFIG_DEPMOD=y
 
 #
@@ -508,9 +508,9 @@ CONFIG_DEPMOD=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:36 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:36 UTC (permalink / raw
  To: gentoo-commits

commit:     2f648312a5d2328721fd94324cf2ba95280efffb
Author:     Ben Kohler <bkohler <AT> gmail <DOT> com>
AuthorDate: Sun Jun  9 13:28:23 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:34:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=2f648312

Make busybox's module loading more fully featured, bug #472312

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, this caused a regression where
busybox's modprobe fails to properly load certain modules. This can be
addressed by abandoning CONFIG_MODPROBE_SMALL=y. We also set a few other
features to make module loading more fully featured.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..513ff0b 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
+CONFIG_MODPROBE=y
 # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:33 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:33 UTC (permalink / raw
  To: gentoo-commits

commit:     9beda0297d361945a8e51325b9742a83f9fb5753
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Jun  9 13:32:25 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:32:25 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=9beda029

Add more module loading features

These additional features were suggested by Fabio in bug #472312.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 513ff0b..da260a8 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -495,7 +495,7 @@ CONFIG_RMMOD=y
 CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
 CONFIG_MODPROBE=y
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
 CONFIG_DEPMOD=y
 
 #
@@ -508,9 +508,9 @@ CONFIG_DEPMOD=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:33 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:33 UTC (permalink / raw
  To: gentoo-commits

commit:     c3c2e464e21a7298284c4688a2fd3776c813bedb
Author:     Ben Kohler <bkohler <AT> gmail <DOT> com>
AuthorDate: Sun Jun  9 13:28:23 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:28:23 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=c3c2e464

Make busybox's module loading more fully featured, bug #472312

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, this caused a regression because
busybox's modprobe does fails to properly load certain modules. This can
be addressed by abandoning CONFIG_MODPROBE_SMALL=y. We also set a few
other features to make module loading more fully featured.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..513ff0b 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
 # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
+CONFIG_MODPROBE=y
 # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:33 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:33 UTC (permalink / raw
  To: gentoo-commits

commit:     ce8210ead879b98cc5314a922874a068aa106b47
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:24:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=ce8210ea

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This issue was made clear by commit
71d35173727dc968d7baa2107accb99ebbc5b188 because it ensured that the
zpool and zfs commands were not run until the ZFS module was loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..73c0f0c 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:33 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:33 UTC (permalink / raw
  To: gentoo-commits

commit:     90f1bb4fb7b30b777c7d44816bebd967141d5d57
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:24:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=90f1bb4f

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..f598402 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,7 +720,12 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
+
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout waitForZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
+		elif [ -z "${ZFS_POOL}" ]
 		then
 			good_msg "Importing ZFS pools"
 
@@ -745,9 +756,9 @@ startVolumes() {
 
 				if [ "$?" = '0' ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "Import of ${ZFS_POOL} succeeded"
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					bad_msg "Import of ${ZFS_POOL} failed"
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:33 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:33 UTC (permalink / raw
  To: gentoo-commits

commit:     15ee411366089342e7a9d56f4d2d16af2df40749
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:24:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=15ee4113

Refactor ZFS module load hook

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..3784456 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,16 +298,17 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
-	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
-		USE_ZFS=0
+	for i in /sbin/zfs /sbin/zpool
+	do
+		if [ ! -x ${i} ]
+		then
+			USE_ZFS=0
+			bad_msg 'Aborting use of zfs because ${i} not found!'
+			break
+		fi
+	done
 
-		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
-		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
-		bad_msg 'Aborting use of zfs!'
-	fi
+	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:33 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:33 UTC (permalink / raw
  To: gentoo-commits

commit:     31faf0535cb6bbe8b3c4240614b6c162694c2570
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:40:07 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:24:55 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=31faf053

Add call_func_timeout helper function

call_func_timeout permits us to call a helper function and kill it
should it exceed some timeout. This is derived from example code posted
on Stack Overflow:

http://stackoverflow.com/a/11056286

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..c8e7abb 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,22 @@
 
 . /etc/initrd.defaults
 
+call_func_timeout()
+{
+	local func=$1 timeout=$2 pid watcher
+	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
+
+	( ${func} ) & pid=$!
+	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
+	if wait ${pid} 2>/dev/null; then
+	    kill -HUP $watcher 2> /dev/null
+	    wait $watcher
+	    return 1
+	fi
+
+	return 0
+}
+
 modules_load() {
 	for module in $*
 	do


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:21 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:21 UTC (permalink / raw
  To: gentoo-commits

commit:     1c0131bc6d5acb9a0f7b6d6a7d6c80c0ce2f4cf7
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:19:37 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=1c0131bc

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This issue was made clear by commit
71d35173727dc968d7baa2107accb99ebbc5b188 because it ensured that the
zpool and zfs commands were not run until the ZFS module was loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..73c0f0c 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:17 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:17 UTC (permalink / raw
  To: gentoo-commits

commit:     a0d40003ea3098553f963a17f311671ef3b131e4
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:16:34 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=a0d40003

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This was discovered by commit
71d35173727dc968d7baa2107accb99ebbc5b188 because it changed things so
that the zpool and zfs commands were not run until the ZFS module was
loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..73c0f0c 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:17 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:17 UTC (permalink / raw
  To: gentoo-commits

commit:     f61e7933733687d7d3a424c0d7389787b353973a
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:16:34 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=f61e7933

Refactor ZFS module load hook

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..3784456 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,16 +298,17 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
-	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
-		USE_ZFS=0
+	for i in /sbin/zfs /sbin/zpool
+	do
+		if [ ! -x ${i} ]
+		then
+			USE_ZFS=0
+			bad_msg 'Aborting use of zfs because ${i} not found!'
+			break
+		fi
+	done
 
-		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
-		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
-		bad_msg 'Aborting use of zfs!'
-	fi
+	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:17 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:17 UTC (permalink / raw
  To: gentoo-commits

commit:     ea52c0e7e74a601d46b26caf3a2bf6a1095726ae
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:40:07 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:16:34 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=ea52c0e7

Add call_func_timeout helper function

call_func_timeout permits us to call a helper function and kill it
should it exceed some timeout. This is derived from example code posted
on Stack Overflow:

http://stackoverflow.com/a/11056286

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..c8e7abb 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,22 @@
 
 . /etc/initrd.defaults
 
+call_func_timeout()
+{
+	local func=$1 timeout=$2 pid watcher
+	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
+
+	( ${func} ) & pid=$!
+	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
+	if wait ${pid} 2>/dev/null; then
+	    kill -HUP $watcher 2> /dev/null
+	    wait $watcher
+	    return 1
+	fi
+
+	return 0
+}
+
 modules_load() {
 	for module in $*
 	do


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:17 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:17 UTC (permalink / raw
  To: gentoo-commits

commit:     ce6de04860a629e9deb033bc4773c8bfccf2ed02
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:16:34 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=ce6de048

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..f598402 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,7 +720,12 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
+
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout waitForZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
+		elif [ -z "${ZFS_POOL}" ]
 		then
 			good_msg "Importing ZFS pools"
 
@@ -745,9 +756,9 @@ startVolumes() {
 
 				if [ "$?" = '0' ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "Import of ${ZFS_POOL} succeeded"
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					bad_msg "Import of ${ZFS_POOL} failed"
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:15 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:15 UTC (permalink / raw
  To: gentoo-commits

commit:     28da47e3363631dfd1c97164a0efe767f2eb5371
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 13:13:58 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:14:20 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=28da47e3

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. This was discovered by commit
71d35173727dc968d7baa2107accb99ebbc5b188 because it changed things so
that the zpool and zfs commands were not run until the ZFS module was
loaded.

busybox modprobe's failure to load module dependencies correctly appears
to occur because busybox modprobe does not wait until until a module is
loaded before loading a module that depends on it, which is a race. It
would be best to correct this race by waiting until the module has
properly loaded, but it is not clear that the race is the only thing
going wrong and developer time is a premium.

We implement a workaround by modifying the busy loop added in the
previous commit to explicit call `modprobe zfs` on each iteration. While
the first few calls fail due to bugs in busybox modprobe, it will
eventually work, after which each call is a noop. This lets us keep
looping until either the loop exit condition that /dev/zvol exist is
reached or the 5 second timeout is reached.

Once the busybox modprobe issue is fixed, this workaround should be safe
to revert.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 5 +++--
 defaults/linuxrc        | 2 --
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..73c0f0c 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 3784456..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -307,8 +307,6 @@ then
 			break
 		fi
 	done
-
-	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 13:15 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 13:15 UTC (permalink / raw
  To: gentoo-commits

commit:     cd14f68ef3d13622bd5924da375f58e9307533f4
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 13:13:22 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=cd14f68e

Refactor ZFS module load hook

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..3784456 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,16 +298,17 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
-	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
-		USE_ZFS=0
+	for i in /sbin/zfs /sbin/zpool
+	do
+		if [ ! -x ${i} ]
+		then
+			USE_ZFS=0
+			bad_msg 'Aborting use of zfs because ${i} not found!'
+			break
+		fi
+	done
 
-		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
-		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
-		bad_msg 'Aborting use of zfs!'
-	fi
+	[ "USE_ZFS" = "1" ] && MY_HWOPTS="${MY_HWOPTS} zfs"
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 12:29 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 12:29 UTC (permalink / raw
  To: gentoo-commits

commit:     022336959eeb1b15b10c2d351432ee3dd68aacb7
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 12:28:19 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=02233695

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. We prevent this by explicitly calling
modprobe on each of the dependencies before attempting to import the
pool.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts |  6 +++---
 defaults/linuxrc        | 19 +++++++++----------
 2 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..340cc54 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -637,9 +637,10 @@ chooseKeymap() {
 }
 
 # This helper function is to be called using call_func_timeout.
-# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+# This works around the inability of busybox modprobe to handle complex module dependencies.
+# This also enables us to wait a reasonable amount of time until /dev/zfs appears.
 waitForZFS() {
-	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+	while [ ! -c /dev/zfs ]; do modprobe zfs 2> /dev/null; done;
 }
 
 startVolumes() {
@@ -720,7 +721,6 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-
 		# Avoid race involving asynchronous module loading
 		if call_func_timeout waitForZFS 5
 		then

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,16 +298,15 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
-	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
-		USE_ZFS=0
-
-		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
-		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
-		bad_msg 'Aborting use of zfs!'
-	fi
+	for i in /sbin/zfs /sbin/zpool
+	do
+		if [ ! -x ${i} ]
+		then
+			USE_ZFS=0
+			bad_msg 'Aborting use of zfs because ${i} not found!'
+			break
+		fi
+	done
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 12:11 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 12:11 UTC (permalink / raw
  To: gentoo-commits

commit:     36ae7f3a00476c6c1e4173d41d3ccf41a3574937
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 12:11:07 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=36ae7f3a

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. We prevent this by explicitly calling
modprobe on each of the dependencies before attempting to import the
pool.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts |  2 ++
 defaults/linuxrc        | 19 +++++++++----------
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..298feec 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -720,6 +720,8 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
+		# Workaround busybox modprobe's inability to load modules with multiple levels of dependencies
+		modprobe -a zlib_deflate spl zavl znvpair zcommon zunicode zfs
 
 		# Avoid race involving asynchronous module loading
 		if call_func_timeout waitForZFS 5

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..d6d0eaa 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,16 +298,15 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
-	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
-		USE_ZFS=0
-
-		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
-		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
-		bad_msg 'Aborting use of zfs!'
-	fi
+	for i in /sbin/zfs /sbin/zpool
+	do
+		if [ ! -x ${i} ]
+		then
+			USE_ZFS=0
+			bad_msg 'Aborting use of zfs because ${i} not found!'
+			break
+		fi
+	done
 fi
 
 splash 'init'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 11:56 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 11:56 UTC (permalink / raw
  To: gentoo-commits

commit:     404e452dffbbf89c99fa658c90390d6eb59546af
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 11:55:34 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=404e452d

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will invoke modprobe if /dev/zvol is missing,
which concealed this problem. However, this caused problems because some
invocations would fail and under certain circumstances, init would be
killed, causing a kernel panic. We prevent this by explicitly calling
modprobe on each of the dependencies before attempting to import the
pool.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..60294e6 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -300,7 +300,7 @@ if [ "USE_ZFS" = "1" ]
 then
 	if [ -x /sbin/zfs -a -x /sbin/zpool ]
 	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
+		MY_HWOPTS="${MY_HWOPTS} zlib_deflate spl zavl znvpair zcommon zunicode zfs"
 	else
 		USE_ZFS=0
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 11:51 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 11:51 UTC (permalink / raw
  To: gentoo-commits

commit:     1ffe68f499e1b95e951413731bd6fd0f55dede61
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 11:51:04 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=1ffe68f4

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will call invoke modprobe if /dev/zvol is
missing, which concealed this problem. However, this caused problems
because some invocations would fail and under certain circumstances,
init would be killed, causing a kernel panic. We prevent this by
explicitly calling modprobe on each of the dependencies before
attempting to import the pool.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..60294e6 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -300,7 +300,7 @@ if [ "USE_ZFS" = "1" ]
 then
 	if [ -x /sbin/zfs -a -x /sbin/zpool ]
 	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
+		MY_HWOPTS="${MY_HWOPTS} zlib_deflate spl zavl znvpair zcommon zunicode zfs"
 	else
 		USE_ZFS=0
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 11:47 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 11:47 UTC (permalink / raw
  To: gentoo-commits

commit:     c46d88810aefa5e982cdfe01237f64a7e6a63b5a
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 11:47:06 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=c46d8881

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will call invoke modprobe if /dev/zvol is
missing, which concealed this problem. However, this caused problems
because some invocations would fail and under certain circumstances,
init would be killed, causing a kernel panic. We prevent this by
explicitly calling modprobe on each of the dependencies before
attempting to import the pool.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 6 ++++++
 defaults/linuxrc        | 5 +----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..4d1cc90 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -721,6 +721,12 @@ startVolumes() {
 	if [ "${USE_ZFS}" = '1' ]
 	then
 
+		# Load modules
+		for i in zlib_deflate spl zavl znvpair zcommon zunicode zfs
+		do
+			modprobe ${i}
+		done
+
 		# Avoid race involving asynchronous module loading
 		if call_func_timeout waitForZFS 5
 		then

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..f54f7d5 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,12 +298,9 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
+	if [ ! -x /sbin/zfs -o ! -x /sbin/zpool ]
 	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
 		USE_ZFS=0
-
 		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
 		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
 		bad_msg 'Aborting use of zfs!'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 11:43 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 11:43 UTC (permalink / raw
  To: gentoo-commits

commit:     7bf3e57adcab2900860090efbdb83ac2b9787d8b
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 11:36:43 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 11:42:51 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=7bf3e57a

Workaround busybox modprobe's inability to load ZFS modules

Commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 replaced our modprobe
with busybox's modprobe. Unfortunately, busybox's modprobe appears to be
unable to properly load modules with more than 1 level of dependencies.

The zfs and zpool commands will call invoke modprobe if /dev/zvol is
missing, which concealed this problem. However, this caused problems
because some invocations would fail and under certain circumstances,
init would be killed, causing a kernel panic. We prevent this by
explicitly calling modprobe on each of the dependencies before
attempting to import the pool.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 6 ++++++
 defaults/linuxrc        | 5 +----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index f598402..4d1cc90 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -721,6 +721,12 @@ startVolumes() {
 	if [ "${USE_ZFS}" = '1' ]
 	then
 
+		# Load modules
+		for i in zlib_deflate spl zavl znvpair zcommon zunicode zfs
+		do
+			modprobe ${i}
+		done
+
 		# Avoid race involving asynchronous module loading
 		if call_func_timeout waitForZFS 5
 		then

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..f54f7d5 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -298,12 +298,9 @@ esac
 # Verify that it is safe to use ZFS
 if [ "USE_ZFS" = "1" ]
 then
-	if [ -x /sbin/zfs -a -x /sbin/zpool ]
+	if [ ! -x /sbin/zfs -o ! -x /sbin/zpool ]
 	then
-		MY_HWOPTS="${MY_HWOPTS} zfs"
-	else
 		USE_ZFS=0
-
 		[ -x /sbin/zfs ] || bad_msg '/sbin/zfs not found!'
 		[ -x /sbin/zpool ] || bad_msg '/sbin/zpool not found!'
 		bad_msg 'Aborting use of zfs!'


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 10:28 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 10:28 UTC (permalink / raw
  To: gentoo-commits

commit:     90c4d77b8dc8d6de601ca41cd6ffa7bfd2cd5a2e
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 10:27:29 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 10:27:29 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=90c4d77b

Do not set CONFIG_FEATURE_CHECK_TAINTED_MODULE

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 82c879c..bf24321 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -508,7 +508,7 @@ CONFIG_DEPMOD=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
 CONFIG_FEATURE_MODUTILS_ALIAS=y
 CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 10:05 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 10:05 UTC (permalink / raw
  To: gentoo-commits

commit:     71d35173727dc968d7baa2107accb99ebbc5b188
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 10:05:18 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=71d35173

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..f598402 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,7 +720,12 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
+
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout waitForZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
+		elif [ -z "${ZFS_POOL}" ]
 		then
 			good_msg "Importing ZFS pools"
 
@@ -745,9 +756,9 @@ startVolumes() {
 
 				if [ "$?" = '0' ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "Import of ${ZFS_POOL} succeeded"
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					bad_msg "Import of ${ZFS_POOL} failed"
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09 10:02 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09 10:02 UTC (permalink / raw
  To: gentoo-commits

commit:     6a1fe6ba0d836242d2ab2b600f34cc0a98c883d2
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 10:01:35 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=6a1fe6ba

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 61 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..0b76011 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,40 +720,47 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
-		then
-			good_msg "Importing ZFS pools"
 
-			/sbin/zpool import -N -a ${ZPOOL_FORCE}
-
-			if [ "$?" = '0' ]
-			then
-				good_msg "Importing ZFS pools succeeded"
-			else
-				bad_msg "Imported ZFS pools failed"
-			fi
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout waitForZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
 		else
-
-			if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
+			if [ -z "${ZFS_POOL}" ]
 			then
-				good_msg "ZFS pool ${ZFS_POOL} already imported."
+				good_msg "Importing ZFS pools"
 
-				if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+				/sbin/zpool import -N -a ${ZPOOL_FORCE}
+
+				if [ "$?" = '0' ]
 				then
-					good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
-					/sbin/zpool export -f "${ZFS_POOL}"
-					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					good_msg "Importing ZFS pools succeeded"
+				else
+					bad_msg "Imported ZFS pools failed"
 				fi
 			else
-				good_msg "Importing ZFS pool ${ZFS_POOL}"
-
-				/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 
-				if [ "$?" = '0' ]
+				if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "ZFS pool ${ZFS_POOL} already imported."
+
+					if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+					then
+						good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
+						/sbin/zpool export -f "${ZFS_POOL}"
+						/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					fi
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					good_msg "Importing ZFS pool ${ZFS_POOL}"
+
+					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+
+					if [ "$?" = '0' ]
+					then
+						good_msg "Import of ${ZFS_POOL} succeeded"
+					else
+						bad_msg "Import of ${ZFS_POOL} failed"
+					fi
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:58 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:58 UTC (permalink / raw
  To: gentoo-commits

commit:     643b61faf11add722bcaef2e0bd9c22e9b440c5f
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:57:24 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=643b61fa

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 61 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..bc647d8 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,40 +720,47 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
-		then
-			good_msg "Importing ZFS pools"
 
-			/sbin/zpool import -N -a ${ZPOOL_FORCE}
-
-			if [ "$?" = '0' ]
-			then
-				good_msg "Importing ZFS pools succeeded"
-			else
-				bad_msg "Imported ZFS pools failed"
-			fi
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout wait_for_ZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
 		else
-
-			if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
+			if [ -z "${ZFS_POOL}" ]
 			then
-				good_msg "ZFS pool ${ZFS_POOL} already imported."
+				good_msg "Importing ZFS pools"
 
-				if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+				/sbin/zpool import -N -a ${ZPOOL_FORCE}
+
+				if [ "$?" = '0' ]
 				then
-					good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
-					/sbin/zpool export -f "${ZFS_POOL}"
-					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					good_msg "Importing ZFS pools succeeded"
+				else
+					bad_msg "Imported ZFS pools failed"
 				fi
 			else
-				good_msg "Importing ZFS pool ${ZFS_POOL}"
-
-				/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 
-				if [ "$?" = '0' ]
+				if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "ZFS pool ${ZFS_POOL} already imported."
+
+					if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+					then
+						good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
+						/sbin/zpool export -f "${ZFS_POOL}"
+						/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					fi
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					good_msg "Importing ZFS pool ${ZFS_POOL}"
+
+					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+
+					if [ "$?" = '0' ]
+					then
+						good_msg "Import of ${ZFS_POOL} succeeded"
+					else
+						bad_msg "Import of ${ZFS_POOL} failed"
+					fi
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:58 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:58 UTC (permalink / raw
  To: gentoo-commits

commit:     171324ea0c713f4c6c7f60587e01fe6718d11874
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:40:07 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:57:24 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=171324ea

Add call_func_timeout helper function

call_func_timeout permits us to call a helper function and kill it
should it exceed some timeout. This is derived from example code posted
on Stack Overflow:

http://stackoverflow.com/a/11056286

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..c8e7abb 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,22 @@
 
 . /etc/initrd.defaults
 
+call_func_timeout()
+{
+	local func=$1 timeout=$2 pid watcher
+	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
+
+	( ${func} ) & pid=$!
+	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
+	if wait ${pid} 2>/dev/null; then
+	    kill -HUP $watcher 2> /dev/null
+	    wait $watcher
+	    return 1
+	fi
+
+	return 0
+}
+
 modules_load() {
 	for module in $*
 	do


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:58 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:58 UTC (permalink / raw
  To: gentoo-commits

commit:     61ba0959fdb6dee4259a7db04982d836ccaaa3b8
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sat Jun  8 14:46:52 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:57:24 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=61ba0959

busybox: switch away from MODPROBE_SMALL, see bug #472312#c27

---
 defaults/busy-config | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..82c879c 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
-# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils
@@ -508,9 +508,9 @@ CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:53 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:53 UTC (permalink / raw
  To: gentoo-commits

commit:     96fc5959f5f911a019079fe4cf6e808448d6a0d4
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:52:52 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=96fc5959

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 61 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..bc647d8 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This helper function is to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears.
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,40 +720,47 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
-		then
-			good_msg "Importing ZFS pools"
 
-			/sbin/zpool import -N -a ${ZPOOL_FORCE}
-
-			if [ "$?" = '0' ]
-			then
-				good_msg "Importing ZFS pools succeeded"
-			else
-				bad_msg "Imported ZFS pools failed"
-			fi
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout wait_for_ZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
 		else
-
-			if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
+			if [ -z "${ZFS_POOL}" ]
 			then
-				good_msg "ZFS pool ${ZFS_POOL} already imported."
+				good_msg "Importing ZFS pools"
 
-				if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+				/sbin/zpool import -N -a ${ZPOOL_FORCE}
+
+				if [ "$?" = '0' ]
 				then
-					good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
-					/sbin/zpool export -f "${ZFS_POOL}"
-					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					good_msg "Importing ZFS pools succeeded"
+				else
+					bad_msg "Imported ZFS pools failed"
 				fi
 			else
-				good_msg "Importing ZFS pool ${ZFS_POOL}"
-
-				/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 
-				if [ "$?" = '0' ]
+				if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "ZFS pool ${ZFS_POOL} already imported."
+
+					if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+					then
+						good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
+						/sbin/zpool export -f "${ZFS_POOL}"
+						/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					fi
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					good_msg "Importing ZFS pool ${ZFS_POOL}"
+
+					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+
+					if [ "$?" = '0' ]
+					then
+						good_msg "Import of ${ZFS_POOL} succeeded"
+					else
+						bad_msg "Import of ${ZFS_POOL} failed"
+					fi
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:49 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:49 UTC (permalink / raw
  To: gentoo-commits

commit:     64ba11e1a413394a65d39843fcc54926e7e3044d
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:40:07 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:48:47 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=64ba11e1

Add call_func_timeout helper function

call_func_timeout permits us to call a helper function and kill it
should it exceed some timeout. This is derived from example code posted
on Stack Overflow:

http://stackoverflow.com/a/11056286

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..c8e7abb 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,22 @@
 
 . /etc/initrd.defaults
 
+call_func_timeout()
+{
+	local func=$1 timeout=$2 pid watcher
+	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
+
+	( ${func} ) & pid=$!
+	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
+	if wait ${pid} 2>/dev/null; then
+	    kill -HUP $watcher 2> /dev/null
+	    wait $watcher
+	    return 1
+	fi
+
+	return 0
+}
+
 modules_load() {
 	for module in $*
 	do


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:49 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:49 UTC (permalink / raw
  To: gentoo-commits

commit:     951638ab5e354e5d8352858c5e23b391e1ff5079
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:48:48 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=951638ab

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 61 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..5ef0d39 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This is helper function meant to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,40 +720,47 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
-		then
-			good_msg "Importing ZFS pools"
 
-			/sbin/zpool import -N -a ${ZPOOL_FORCE}
-
-			if [ "$?" = '0' ]
-			then
-				good_msg "Importing ZFS pools succeeded"
-			else
-				bad_msg "Imported ZFS pools failed"
-			fi
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout wait_for_ZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
 		else
-
-			if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
+			if [ -z "${ZFS_POOL}" ]
 			then
-				good_msg "ZFS pool ${ZFS_POOL} already imported."
+				good_msg "Importing ZFS pools"
 
-				if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+				/sbin/zpool import -N -a ${ZPOOL_FORCE}
+
+				if [ "$?" = '0' ]
 				then
-					good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
-					/sbin/zpool export -f "${ZFS_POOL}"
-					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					good_msg "Importing ZFS pools succeeded"
+				else
+					bad_msg "Imported ZFS pools failed"
 				fi
 			else
-				good_msg "Importing ZFS pool ${ZFS_POOL}"
-
-				/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 
-				if [ "$?" = '0' ]
+				if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "ZFS pool ${ZFS_POOL} already imported."
+
+					if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+					then
+						good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
+						/sbin/zpool export -f "${ZFS_POOL}"
+						/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					fi
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					good_msg "Importing ZFS pool ${ZFS_POOL}"
+
+					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+
+					if [ "$?" = '0' ]
+					then
+						good_msg "Import of ${ZFS_POOL} succeeded"
+					else
+						bad_msg "Import of ${ZFS_POOL} failed"
+					fi
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:46 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:46 UTC (permalink / raw
  To: gentoo-commits

commit:     bf7cf9542e40ca2731a1fb0a037d23f279c4a3bd
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:45:49 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=bf7cf954

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 61 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..5ef0d39 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -636,6 +636,12 @@ chooseKeymap() {
 	fi
 }
 
+# This is helper function meant to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,40 +720,47 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
-		then
-			good_msg "Importing ZFS pools"
 
-			/sbin/zpool import -N -a ${ZPOOL_FORCE}
-
-			if [ "$?" = '0' ]
-			then
-				good_msg "Importing ZFS pools succeeded"
-			else
-				bad_msg "Imported ZFS pools failed"
-			fi
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout wait_for_ZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
 		else
-
-			if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
+			if [ -z "${ZFS_POOL}" ]
 			then
-				good_msg "ZFS pool ${ZFS_POOL} already imported."
+				good_msg "Importing ZFS pools"
 
-				if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+				/sbin/zpool import -N -a ${ZPOOL_FORCE}
+
+				if [ "$?" = '0' ]
 				then
-					good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
-					/sbin/zpool export -f "${ZFS_POOL}"
-					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					good_msg "Importing ZFS pools succeeded"
+				else
+					bad_msg "Imported ZFS pools failed"
 				fi
 			else
-				good_msg "Importing ZFS pool ${ZFS_POOL}"
-
-				/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 
-				if [ "$?" = '0' ]
+				if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "ZFS pool ${ZFS_POOL} already imported."
+
+					if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+					then
+						good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
+						/sbin/zpool export -f "${ZFS_POOL}"
+						/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					fi
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					good_msg "Importing ZFS pool ${ZFS_POOL}"
+
+					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+
+					if [ "$?" = '0' ]
+					then
+						good_msg "Import of ${ZFS_POOL} succeeded"
+					else
+						bad_msg "Import of ${ZFS_POOL} failed"
+					fi
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:44 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:44 UTC (permalink / raw
  To: gentoo-commits

commit:     8f4cf00ddc89eb1c710509a9fd23321cef356730
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:31:33 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:43:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=8f4cf00d

Import pool after ZFS module finishes loading

There is a race between ZFS module initialization and our attempt to
import pools. We address this by doing a busy wait for the /dev/zfs
device to appear. We wait a maximum of 5 seconds for the device to
appear.

We also slightly alter output messages to be more readable.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 77 ++++++++++++++++++++++++-------------------------
 1 file changed, 37 insertions(+), 40 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c8e7abb..2f7286b 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,22 +2,6 @@
 
 . /etc/initrd.defaults
 
-call_func_timeout()
-{
-	local func=$1 timeout=$2 pid watcher
-	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
-
-	( ${func} ) & pid=$!
-	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
-	if wait ${pid} 2>/dev/null; then
-	    kill -HUP $watcher 2> /dev/null
-	    wait $watcher
-	    return 1
-	fi
-
-	return 0
-}
-
 modules_load() {
 	for module in $*
 	do
@@ -636,6 +620,12 @@ chooseKeymap() {
 	fi
 }
 
+# This is helper function meant to be called using call_func_timeout.
+# It enables us to wait a reasonable amount of time until /dev/zfs appears
+waitForZFS() {
+	while [ ! -c /dev/zfs ]; do echo >/dev/null; done;
+}
+
 startVolumes() {
 	#good_msg 'Checking if volumes need to be started...'
 
@@ -714,40 +704,47 @@ startVolumes() {
 	
 	if [ "${USE_ZFS}" = '1' ]
 	then
-		if [ -z "${ZFS_POOL}" ]
-		then
-			good_msg "Importing ZFS pools"
 
-			/sbin/zpool import -N -a ${ZPOOL_FORCE}
-
-			if [ "$?" = '0' ]
-			then
-				good_msg "Importing ZFS pools succeeded"
-			else
-				bad_msg "Imported ZFS pools failed"
-			fi
+		# Avoid race involving asynchronous module loading
+		if call_func_timeout wait_for_ZFS 5
+		then
+			bad_msg "Cannot import ZFS pool because /dev/zfs is missing"
 		else
-
-			if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
+			if [ -z "${ZFS_POOL}" ]
 			then
-				good_msg "ZFS pool ${ZFS_POOL} already imported."
+				good_msg "Importing ZFS pools"
+
+				/sbin/zpool import -N -a ${ZPOOL_FORCE}
 
-				if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+				if [ "$?" = '0' ]
 				then
-					good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
-					/sbin/zpool export -f "${ZFS_POOL}"
-					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					good_msg "Importing ZFS pools succeeded"
+				else
+					bad_msg "Imported ZFS pools failed"
 				fi
 			else
-				good_msg "Importing ZFS pool ${ZFS_POOL}"
-
-				/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 
-				if [ "$?" = '0' ]
+				if [ "$(zpool list -H -o name ${ZFS_POOL} 2>&1)" = "$ZFS_POOL" ]
 				then
-					good_msg "Importing ${ZFS_POOL} succeeded"
+					good_msg "ZFS pool ${ZFS_POOL} already imported."
+
+					if [ -n "${CRYPT_ROOT}" -o -n "${CRYPT_SWAP}" ]
+					then
+						good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
+						/sbin/zpool export -f "${ZFS_POOL}"
+						/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+					fi
 				else
-					bad_msg "Importing ${ZFS_POOL} failed"
+					good_msg "Importing ZFS pool ${ZFS_POOL}"
+
+					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
+
+					if [ "$?" = '0' ]
+					then
+						good_msg "Import of ${ZFS_POOL} succeeded"
+					else
+						bad_msg "Import of ${ZFS_POOL} failed"
+					fi
 				fi
 			fi
 		fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  9:44 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  9:44 UTC (permalink / raw
  To: gentoo-commits

commit:     add80bbae16dff97c52be8d8da92fe3ccdf4bdd9
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sun Jun  9 09:40:07 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 09:43:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=add80bba

Add call_func_timeout helper function

call_func_timeout permits us to call a helper function and kill it
should it exceed some timeout. This is derived from example code posted
on Stack Overflow:

http://stackoverflow.com/a/11056286

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..c8e7abb 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,22 @@
 
 . /etc/initrd.defaults
 
+call_func_timeout()
+{
+	local func=$1 timeout=$2 pid watcher
+	[ $# -ne 2 ] && gen_die "call_func_timeout() called with $# arguments"
+
+	( ${func} ) & pid=$!
+	( sleep ${timeout} && kill -HUP ${pid} ) 2>/dev/null & watcher=$!
+	if wait ${pid} 2>/dev/null; then
+	    kill -HUP $watcher 2> /dev/null
+	    wait $watcher
+	    return 1
+	fi
+
+	return 0
+}
+
 modules_load() {
 	for module in $*
 	do


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  8:32 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  8:32 UTC (permalink / raw
  To: gentoo-commits

commit:     60b5b0327161b0b7b539d3a3bd0001493bce5fb1
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sat Jun  8 14:46:52 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 08:30:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=60b5b032

busybox: switch away from MODPROBE_SMALL, see bug #472312#c27

---
 defaults/busy-config | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..82c879c 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
-# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils
@@ -508,9 +508,9 @@ CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  7:45 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  7:45 UTC (permalink / raw
  To: gentoo-commits

commit:     bf5df4d56c9e29e593af4c5df0770a19ff36b80d
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sat Jun  8 14:46:52 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 07:44:37 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=bf5df4d5

busybox: switch away from MODPROBE_SMALL, see bug #472312#c27

---
 defaults/busy-config | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index f086b14..82c879c 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -487,16 +487,16 @@ CONFIG_CHPASSWD=y
 # Linux Module Utilities
 #
 CONFIG_MODINFO=y
-CONFIG_MODPROBE_SMALL=y
-CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y
-CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
-# CONFIG_INSMOD is not set
-# CONFIG_RMMOD is not set
-# CONFIG_LSMOD is not set
-# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
-# CONFIG_MODPROBE is not set
-# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
-# CONFIG_DEPMOD is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT=y
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_BLACKLIST=y
+CONFIG_DEPMOD=y
 
 #
 # Options common to multiple modutils
@@ -508,9 +508,9 @@ CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y
 # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
 # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
-# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set
-# CONFIG_FEATURE_MODUTILS_ALIAS is not set
-# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
 CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
 CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-09  6:43 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-09  6:43 UTC (permalink / raw
  To: gentoo-commits

commit:     f60f1859fd778c5476bf152f0091957fb397927d
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Jun  9 06:17:12 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Jun  9 06:24:23 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=f60f1859

linuxrc: call depmod as workaround for bug #472312

busybox modprobe does not properly handle dependencies without
modules.dep.bb, so commit 3a054014e880e5b1ff28e3d87767c45a073da6b5 broke
module loading (bug #472312). Calling `busybox depmod -b` is required to
generate modules.dep.bb at build time, but `busybox depmod -b` is
broken, so we call it in the initramfs. Testing by Fabio Erculiani has
shown that the time penalty for this is approximately 0.05 ms, so this
is an acceptable workaround from a performance standpoint.

This is a squashed version of commits from Sabayon's genkernel-next
repository on github, with a new commit message by Richard Yao:

https://github.com/Sabayon/genkernel-next/commit/ece907ea64c3655854cd4044ed33c5d22d8ca463
https://github.com/Sabayon/genkernel-next/commit/f3570c39577573b3dcd8c77720a292fa6b89a022

The workaround implemented was suggested by Ben Kohler.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts | 11 +++++++++++
 defaults/linuxrc        |  7 +++++++
 2 files changed, 18 insertions(+)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9b0e899..ef58b5b 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -2,6 +2,17 @@
 
 . /etc/initrd.defaults
 
+# We should ship the initramfs with modules.dep.bb
+# But current busybox depmod has broken -b support
+# so we can't do that at build time, unless we want
+# to chroot into the initramfs root, which is much more
+# fragile. See bug #472312
+busybox_depmod_workaround() {
+       local depmod_args
+       [ -n "${QUIET}" ] && depmod_args="-q"
+       depmod ${depmod_args}
+}
+
 modules_load() {
 	for module in $*
 	do

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 9ea305b..ad6af4b 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -320,6 +320,13 @@ mount_devfs
 # Mount sysfs
 mount_sysfs
 
+# We should ship the initramfs with modules.dep.bb
+# But current busybox depmod has broken -b support
+# so we can't do that at build time, unless we want
+# to chroot into the initramfs root, which is much more
+# fragile. See bug #472312
+busybox_depmod_workaround
+
 # Initialize mdev
 good_msg 'Activating mdev'
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-06  3:36 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-06  3:36 UTC (permalink / raw
  To: gentoo-commits

commit:     1c19d8a9c6baee1e418275d3106726472992718b
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Tue Jan  1 16:47:45 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Mon Jun  3 23:49:05 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=1c19d8a9

Add sysctl to busybox

sysctl is necessary to modify chroot restrictions when performing
recovery operations on Gentoo Hardened systems.

Reported-by: Matthew Thode <prometheanfire <AT> gentoo.org>
Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 2b9a4c4..f086b14 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -907,7 +907,7 @@ CONFIG_PS=y
 # CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
 # CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
 # CONFIG_RENICE is not set
-# CONFIG_BB_SYSCTL is not set
+CONFIG_BB_SYSCTL=y
 # CONFIG_TOP is not set
 # CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set
 # CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-03 23:49 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-03 23:49 UTC (permalink / raw
  To: gentoo-commits

commit:     d35ead2b610d11430c432ad67e68be2c90be8080
Author:     Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Tue Jan  1 16:47:45 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Mon Jun  3 23:48:20 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=d35ead2b

Add sysctl to busybox

sysctl is necessary to modify chroot restrictions when performing
recovery operations on Gentoo Hardened systems.

Reported-by: Matthew Thode <prometheanfire <AT> gentoo.org>
Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 2b9a4c4..f086b14 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -907,7 +907,7 @@ CONFIG_PS=y
 # CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
 # CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
 # CONFIG_RENICE is not set
-# CONFIG_BB_SYSCTL is not set
+CONFIG_BB_SYSCTL=y
 # CONFIG_TOP is not set
 # CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set
 # CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-03 23:35 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-03 23:35 UTC (permalink / raw
  To: gentoo-commits

commit:     89658dbe29fb2b37f31c0dc8ca6f16e5e37dbbc2
Author:     Richard Yao <ryao <AT> cs <DOT> stonybrook <DOT> edu>
AuthorDate: Tue Jan  1 16:47:45 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Mon Jun  3 23:34:01 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=89658dbe

Add sysctl to busybox

sysctl is necessary to modify chroot restrictions when performing
recovery operations on Gentoo Hardened systems.

Reported-by: Matthew Thode <prometheanfire <AT> gentoo.org>
Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 2b9a4c4..f086b14 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -907,7 +907,7 @@ CONFIG_PS=y
 # CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
 # CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
 # CONFIG_RENICE is not set
-# CONFIG_BB_SYSCTL is not set
+CONFIG_BB_SYSCTL=y
 # CONFIG_TOP is not set
 # CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set
 # CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-03 23:35 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-03 23:35 UTC (permalink / raw
  To: gentoo-commits

commit:     108f1daf60acfb48e94cf025252ce9d8cb71191a
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Thu Apr 25 15:55:56 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Mon Apr 29 09:54:51 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=108f1daf

linuxrc: run the debug shell multiple times, add a hook before switch_root

---
 defaults/initrd.scripts | 1 +
 defaults/linuxrc        | 5 ++++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index c1969d1..9b0e899 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -1055,6 +1055,7 @@ rundebugshell() {
 	if [ -n "$DEBUG" ]
 	then
 		good_msg 'Starting debug shell as requested by "debug" option.'
+		good_msg "Stopping by: ${1}"
 		do_rundebugshell
 	fi
 }

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 1d26aaf..4bbe5e2 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -424,7 +424,7 @@ mkdir -p "${NEW_ROOT}"
 CHROOT="${NEW_ROOT}"
 
 # Run debug shell if requested
-rundebugshell
+rundebugshell "before setting up the root filesystem"
 
 if [ "${CDROOT}" = '1' ]
 then
@@ -937,6 +937,9 @@ then
 	bad_msg "ERROR: your real /dev is missing tty1, required for splash"
 fi
 
+# Run debug shell if requested
+rundebugshell "before entering switch_root"
+
 exec /sbin/switch_root -c "/dev/console" "${CHROOT}" "${REAL_INIT:-/sbin/init}" "${INIT_OPTS}"
 
 # If we get here, something bad has happened


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-03 23:35 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-03 23:35 UTC (permalink / raw
  To: gentoo-commits

commit:     a408d4a5135fed4507333925713736368a2bf279
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Tue Apr 23 15:41:22 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Thu Apr 25 07:20:32 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=a408d4a5

Drop useless parens in conditionals

---
 defaults/initrd.scripts | 2 +-
 defaults/linuxrc        | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 7ec5c94..e614064 100755
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -420,7 +420,7 @@ prompt_user(){
 
 	eval local oldvalue='$'${1}
 
-	[ \( $# != 2 \) -a \( $# != 3 \) ] && \
+	[ $# != 2 -a $# != 3 ] && \
 		bad_msg "Bad invocation of function prompt_user, please file a bug \
 		report with this message" && exit 1
 	[ -n "${3}" ] && local explnt=" or : ${3}" || local explnt="."

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 0fe05ef..805515b 100755
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -270,13 +270,13 @@ do
 	esac
 done
 
-if [ \( "${CDROOT}" = '0' \) ]
+if [ "${CDROOT}" = '0' ]
 then
-	if [ -z "${REAL_ROOT}" -a \( "${FAKE_ROOT}" != "/dev/ram0" \) ]
+	if [ -z "${REAL_ROOT}" -a "${FAKE_ROOT}" != "/dev/ram0" ]
 	then
 		REAL_ROOT="${FAKE_ROOT}"
 	fi
-	if [ -z "${REAL_INIT}" -a \( "${FAKE_INIT}" != "/linuxrc" \) ]
+	if [ -z "${REAL_INIT}" -a "${FAKE_INIT}" != "/linuxrc" ]
 	then
 		REAL_INIT="${FAKE_INIT}"
 	fi


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-03 23:35 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-03 23:35 UTC (permalink / raw
  To: gentoo-commits

commit:     499f2d98b60588987b8e0a9e3a59a182c83d5785
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Tue Apr 23 16:31:51 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Thu Apr 25 07:21:04 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=499f2d98

Improve speed of bootstrapCD by not calling devicelist unless needed

---
 defaults/initrd.scripts | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index a216b84..ff724b5 100755
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -157,12 +157,15 @@ devicelist(){
 }
 
 bootstrapCD() {
-	local DEVICES=`devicelist`
-	# The device was specified on the command line, so there's no need to scan
-	# a bunch of extra devices
+	local DEVICES=
+
+	# The device was specified on the command line, so there's no need
+	# to scan a bunch of extra devices
 	[ -n "${CDROOT_DEV}" ] && DEVICES="${CDROOT_DEV}"
+	[ -z "${CDROOT_DEV}" ] && DEVICES=$(devicelist)
 
-	findmediamount "cdrom" "${SUBDIR}/${CDROOT_MARKER}" "REAL_ROOT" "${CDROOT_PATH}" ${DEVICES}
+	findmediamount "cdrom" "${SUBDIR}/${CDROOT_MARKER}" \
+		"REAL_ROOT" "${CDROOT_PATH}" ${DEVICES}
 }
 
 bootstrapKey() {


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-03 23:35 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-03 23:35 UTC (permalink / raw
  To: gentoo-commits

commit:     421b210c67a59b5a92ce5a92c6d49254cf1ec07a
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Tue Apr 23 15:26:24 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Thu Apr 25 07:20:27 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=421b210c

Drop KV_2_6_OR_GREATER

Linux 2.2 and 2.4 are no longer supported. RIP old kernels.

---
 defaults/initrd.defaults |  5 -----
 defaults/linuxrc         | 18 ++++++------------
 2 files changed, 6 insertions(+), 17 deletions(-)

diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults
index 8ff5510..e70beab 100755
--- a/defaults/initrd.defaults
+++ b/defaults/initrd.defaults
@@ -50,11 +50,6 @@ KMINOR=`echo $KV | cut -f2 -d.`
 KVER="${KMAJOR}.${KMINOR}"
 MISCOPTS='debug detect'
 
-if [ "${KMAJOR}" -ge 3 ] || [ "${KMAJOR}" -eq 2 -a "${KMINOR}" -eq '6' ]
-then
-	KV_2_6_OR_GREATER="yes"
-fi
-
 QUIET='1'
 ROOT_LINKS='bin sbin lib lib32 lib64 boot usr opt emul'
 ROOT_TREES='etc root home var'

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 703652d..0fe05ef 100755
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -324,16 +324,13 @@ mount_devfs
 mount_sysfs
 
 # Initialize mdev
-if [ "${KV_2_6_OR_GREATER}" ]
-then
-	good_msg 'Activating mdev'
+good_msg 'Activating mdev'
 
-	# Serialize hotplug events
-	touch /dev/mdev.seq
+# Serialize hotplug events
+touch /dev/mdev.seq
 
-	# Setup hotplugging for firmware loading
-	echo /sbin/mdev > /proc/sys/kernel/hotplug
-fi
+# Setup hotplugging for firmware loading
+echo /sbin/mdev > /proc/sys/kernel/hotplug
 
 # Load modules listed in MY_HWOPTS if /lib/modules exists for the running kernel
 if [ -z "${DO_modules}" ]
@@ -357,10 +354,7 @@ else
 fi
 
 # Ensure that device nodes are properly configured
-if [ "${KV_2_6_OR_GREATER}" ]
-then
-	mdev -s || bad_msg "mdev -s failed"
-fi
+mdev -s || bad_msg "mdev -s failed"
 
 # Apply scan delay if specified
 sdelay


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-06-03 23:35 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-06-03 23:35 UTC (permalink / raw
  To: gentoo-commits

commit:     682d0b0d0aaf30e4236809bcf87fc674e6e88c8c
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Tue Apr 23 15:54:10 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Thu Apr 25 07:20:40 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=682d0b0d

Drop "sleep 3" from sdelay if CDROOT=1. One can use scandelay=secs if needed.

While this makes out of the box booting a bit harder on some ancient CD/DVD
drives, it really speeds up the common use case by not sleeping for 3 seconds.

---
 defaults/initrd.scripts | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index e614064..abd8fad 100755
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -991,19 +991,13 @@ startLUKS() {
 
 sdelay() {
 	# Sleep a specific number of seconds if SDELAY is set
-	if [ "${SDELAY}" ]
+	if [ -n "${SDELAY}" ]
 	then
 		good_msg "Waiting ${SDELAY} seconds..."
 		sleep ${SDELAY}
 	elif [ "${CDROOT}" = '1' ]
 	then
-		# many CD/DVD drives require extra sleep, especially when
-		# connected via USB. Many people reported that 1 second sleep
-		# is not enough on their notebooks, that's why sleep 3, when booting
-		# off a livecd is a better default.
-		sleep 3
-	else
-		good_msg 'Hint: Use parameter scandelay[=seconds] if you need waiting here'
+		good_msg 'Hint: Use scandelay[=seconds] if your live medium is slowand boot fails'
 	fi
 }
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2013-01-01 16:53 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2013-01-01 16:53 UTC (permalink / raw
  To: gentoo-commits

commit:     02f271d59f5d729e73de88204b0dc41d12ac6813
Author:     Richard Yao <ryao <AT> cs <DOT> stonybrook <DOT> edu>
AuthorDate: Tue Jan  1 16:47:45 2013 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Tue Jan  1 16:49:22 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=02f271d5

Add sysctl to busybox

sysctl is necessary to modify chroot restrictions when performing
recovery operations on Gentoo Hardened systems.

Reported-by: Matthew Thode <prometheanfire <AT> gentoo.org>
Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/busy-config |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/defaults/busy-config b/defaults/busy-config
index 2b9a4c4..f086b14 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -907,7 +907,7 @@ CONFIG_PS=y
 # CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS is not set
 # CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
 # CONFIG_RENICE is not set
-# CONFIG_BB_SYSCTL is not set
+CONFIG_BB_SYSCTL=y
 # CONFIG_TOP is not set
 # CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE is not set
 # CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS is not set


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2012-11-22 22:20 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2012-11-22 22:20 UTC (permalink / raw
  To: gentoo-commits

commit:     52c9537c4809aebae0f60a1be7c9b3011108ebcb
Author:     Toralf Förster <toralf.foerster <AT> gmx <DOT> de>
AuthorDate: Thu Nov 22 22:13:17 2012 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Thu Nov 22 22:15:24 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=52c9537c

Fix non-functional init_opts parameter, bug #422471

If INIT_OPTS='' is not specified before the argument loop, scoping rules
will prevent it from being seen by the switch_root invocation.

Signed-off-by: Toralf Förster <toralf.foerster <AT> gmx.de>
Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 1bc09a7..c14e9f6 100755
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -38,6 +38,7 @@ CMDLINE=$(cat /proc/cmdline)
 FAKE_ROOT=''
 FAKE_INIT=''
 REAL_ROOTFLAGS=''
+INIT_OPTS=''
 ROOTFSTYPE='auto'
 CRYPT_SILENT=0
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:master commit in: defaults/
@ 2012-11-22 22:20 Richard Yao
  2013-01-01 16:53 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
  0 siblings, 1 reply; 69+ messages in thread
From: Richard Yao @ 2012-11-22 22:20 UTC (permalink / raw
  To: gentoo-commits

commit:     543181ebefddbd83850d667aa422991fbe8c3735
Author:     Toralf Förster <toralf.foerster <AT> gmx <DOT> de>
AuthorDate: Thu Nov 22 22:13:17 2012 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Thu Nov 22 22:17:16 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=543181eb

Fix non-functional init_opts parameter, bug #422471

If INIT_OPTS='' is not specified before the argument loop, scoping rules
will prevent it from being seen by the switch_root invocation.

Signed-off-by: Toralf Förster <toralf.foerster <AT> gmx.de>
Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/linuxrc |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 4166396..f1e20ce 100755
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -38,6 +38,7 @@ CMDLINE=$(cat /proc/cmdline)
 FAKE_ROOT=''
 FAKE_INIT=''
 REAL_ROOTFLAGS=''
+INIT_OPTS=''
 ROOTFSTYPE='auto'
 CRYPT_SILENT=0
 


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:master commit in: defaults/
@ 2012-11-11 17:04 Richard Yao
  2012-11-11 17:32 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
  0 siblings, 1 reply; 69+ messages in thread
From: Richard Yao @ 2012-11-11 17:04 UTC (permalink / raw
  To: gentoo-commits

commit:     30c7284c92cacf47250541172dddb10abd70a7a0
Author:     Fabio Erculiani <lxnay <AT> sabayon <DOT> org>
AuthorDate: Sun Nov 11 09:13:03 2012 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Sun Nov 11 17:01:28 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=30c7284c

Unquote ${ZPOOL_FORCE} variable usage.

The default value of ${ZPOOL_USAGE} is unset, quoting it would result into
a "" argument passed to zpool. The workaround to this is to use "dozfs=force"
boot argument.

Signed-off-by: Richard Yao <ryao <AT> gentoo.org>

---
 defaults/initrd.scripts |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 7cb41b3..2e8e744 100755
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -707,7 +707,7 @@ startVolumes() {
 		then
 			good_msg "Importing ZFS pools"
 
-			/sbin/zpool import -N -a "${ZPOOL_FORCE}"
+			/sbin/zpool import -N -a ${ZPOOL_FORCE}
 
 			if [ "$?" = '0' ]
 			then
@@ -725,12 +725,12 @@ startVolumes() {
 				then
 					good_msg "LUKS detected. Reimporting ${ZFS_POOL}"
 					/sbin/zpool export -f "${ZFS_POOL}"
-					/sbin/zpool import -N "${ZPOOL_FORCE}" "${ZFS_POOL}"
+					/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 				fi
 			else
 				good_msg "Importing ZFS pool ${ZFS_POOL}"
 
-				/sbin/zpool import -N "${ZPOOL_FORCE}" "${ZFS_POOL}"
+				/sbin/zpool import -N ${ZPOOL_FORCE} "${ZFS_POOL}"
 
 				if [ "$?" = '0' ]
 				then


^ permalink raw reply related	[flat|nested] 69+ messages in thread
* [gentoo-commits] proj/genkernel:ryao commit in: defaults/
@ 2012-11-05 18:30 Richard Yao
  0 siblings, 0 replies; 69+ messages in thread
From: Richard Yao @ 2012-11-05 18:30 UTC (permalink / raw
  To: gentoo-commits

commit:     3fa1bf680d90f5841d8830634ed13bbfd76271b7
Author:     Marek Sapota <marek <AT> sapota <DOT> org>
AuthorDate: Fri Nov  2 17:04:18 2012 +0000
Commit:     Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Fri Nov  2 17:06:02 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/genkernel.git;a=commit;h=3fa1bf68

Bug #378105: UUID/LABEL support for LUKS keydevs

LUKS keydevs now support mount by UUID/LABEL.

X-Gentoo-Bug: 378105
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=378105
Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>

---
 defaults/initrd.scripts |   83 ++++++++++++++++++++++++++---------------------
 1 files changed, 46 insertions(+), 37 deletions(-)

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 53e1f97..7cb41b3 100755
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -282,6 +282,36 @@ findnfsmount() {
 	fi
 }
 
+find_real_device() {
+	local DEVICE="${1}"
+	case "${DEVICE}" in
+		UUID\=*|LABEL\=*)
+			local REAL_DEVICE=""
+			local retval=1
+
+			if [ "${retval}" -ne 0 ]; then
+				REAL_DEVICE=`findfs "${DEVICE}" 2>/dev/null`
+				retval=$?
+			fi
+
+			if [ "$retval" -ne 0 ]; then
+				REAL_DEVICE=`busybox findfs "${DEVICE}" 2>/dev/null`
+				retval=$?
+			fi
+
+			if [ "${retval}" -ne 0 ]; then
+				REAL_DEVICE=`blkid -o device -l -t "${DEVICE}"`
+				retval=$?
+			fi
+
+			if [ "${retval}" -eq 0 ] && [ -n "${REAL_DEVICE}" ]; then
+				DEVICE="${REAL_DEVICE}"
+			fi
+		;;
+	esac
+	echo -n "${DEVICE}"
+}
+
 check_loop() {
 	if [ "${LOOP}" = '' -o ! -e "${CDROOT_PATH}/${LOOP}" ]
 	then
@@ -811,32 +841,7 @@ openLUKS() {
 			prompt_user "LUKS_KEYDEV" "${LUKS_NAME} key device"
 			KEYDEV_ERROR=0
 		else
-			case "${LUKS_DEVICE}" in
-				UUID\=*|LABEL\=*)
-					local REAL_LUKS=""
-					local retval=1
-
-					if [ "${retval}" -ne 0 ]; then
-						REAL_LUKS=`findfs "${LUKS_DEVICE}" 2>/dev/null`
-						retval=$?
-					fi
-
-					if [ "$retval" -ne 0 ]; then
-						REAL_LUKS=`busybox findfs "${LUKS_DEVICE}" 2>/dev/null`
-						retval=$?
-					fi
-
-					if [ "${retval}" -ne 0 ]; then
-						REAL_LUKS=`blkid -o device -l -t "${LUKS_DEVICE}"`
-						retval=$?
-					fi
-
-					if [ "${retval}" -eq 0 ] && [ -n "${REAL_LUKS}" ]; then
-						good_msg "Detected device ${REAL_LUKS}"
-						LUKS_DEVICE="${REAL_LUKS}"
-					fi
-				;;
-			esac
+			LUKS_DEVICE=$(find_real_device "${LUKS_DEVICE}")
 
 			setup_md_device ${LUKS_DEVICE}
 			cryptsetup isLuks ${LUKS_DEVICE}
@@ -855,10 +860,12 @@ openLUKS() {
 
 				if [ -n "${LUKS_KEY}" ] 
 				then
+					local REAL_LUKS_KEYDEV="${LUKS_KEYDEV}"
 					if [ ! -e "${mntkey}${LUKS_KEY}" ] 
 					then
-						if [ -b "${LUKS_KEYDEV}" ]
-						then good_msg "Using key device ${LUKS_KEYDEV}." ${CRYPT_SILENT}
+						REAL_LUKS_KEYDEV=$(find_real_device "${LUKS_KEYDEV}")
+						if [ -b "${REAL_LUKS_KEYDEV}" ]
+						then good_msg "Using key device ${REAL_LUKS_KEYDEV}." ${CRYPT_SILENT}
 						else
 							good_msg "Please insert removable device ${LUKS_KEYDEV} for ${LUKS_NAME}" ${CRYPT_SILENT}
 							# abort after 10 secs
@@ -867,18 +874,20 @@ openLUKS() {
 							do 
 								count=$((count-1))
 								sleep 1
-								if [ -b "${LUKS_KEYDEV}" ]
+								REAL_LUKS_KEYDEV=$(find_real_device "${LUKS_KEYDEV}")
+								if [ -b "${REAL_LUKS_KEYDEV}" ]
 								then
-									good_msg "Removable device ${LUKS_KEYDEV} detected." ${CRYPT_SILENT}
+									good_msg "Removable device ${REAL_LUKS_KEYDEV} detected." ${CRYPT_SILENT}
 									break
 								fi
 							done
-							if [ ! -b "${LUKS_KEYDEV}" ]
+							if [ ! -b "${REAL_LUKS_KEYDEV}" ]
 							then
 								eval CRYPT_${TYPE}_KEY=${LUKS_KEY}
 								bootstrapKey ${TYPE}
 								eval LUKS_KEYDEV='"${CRYPT_'${TYPE}'_KEYDEV}"'
-								if [ ! -b "${LUKS_KEYDEV}" ]; then
+								REAL_LUKS_KEYDEV=$(find_real_device "${LUKS_KEYDEV}")
+								if [ ! -b "${REAL_LUKS_KEYDEV}" ]; then
 									KEYDEV_ERROR=1
 									bad_msg "Removable device ${LUKS_KEYDEV} not found." ${CRYPT_SILENT}
 									continue
@@ -890,27 +899,27 @@ openLUKS() {
 						# At this point a device was recognized, now let's see if the key is there
 						[ ! -d "$mntkey" ] && mkdir -p ${mntkey} 2>/dev/null >/dev/null
 
-						mount -n -o ro ${LUKS_KEYDEV} ${mntkey} >/dev/null 2>/dev/null
+						mount -n -o ro ${REAL_LUKS_KEYDEV} ${mntkey} >/dev/null 2>/dev/null
 						if [ "$?" != '0' ]
 						then
 							KEYDEV_ERROR=1
-							bad_msg "Mounting of device ${LUKS_KEYDEV} failed." ${CRYPT_SILENT}
+							bad_msg "Mounting of device ${REAL_LUKS_KEYDEV} failed." ${CRYPT_SILENT}
 							continue
 						else
-							good_msg "Removable device ${LUKS_KEYDEV} mounted." ${CRYPT_SILENT}
+							good_msg "Removable device ${REAL_LUKS_KEYDEV} mounted." ${CRYPT_SILENT}
 							sleep 2
 							# keyfile exists?
 							if [ ! -e "${mntkey}${LUKS_KEY}" ]; then
 								umount -n ${mntkey} 2>/dev/null >/dev/null
 								KEY_ERROR=1
 								KEYDEV_ERROR=1
-								bad_msg "Key {LUKS_KEY} on device ${LUKS_KEYDEV} not found." ${CRYPT_SILENT}
+								bad_msg "Key {LUKS_KEY} on device ${REAL_LUKS_KEYDEV} not found." ${CRYPT_SILENT}
 								continue
 							fi
 						fi
 					fi
 					# At this point a candidate key exists (either mounted before or not)
-					good_msg "${LUKS_KEY} on device ${LUKS_KEYDEV} found" ${CRYPT_SILENT}
+					good_msg "${LUKS_KEY} on device ${REAL_LUKS_KEYDEV} found" ${CRYPT_SILENT}
 					if [ "$(echo ${LUKS_KEY} | grep -o '.gpg$')" = ".gpg" ] && [ -e /sbin/gpg ] ; then
 						[ -e /dev/tty ] && mv /dev/tty /dev/tty.org
 						mknod /dev/tty c 5 1


^ permalink raw reply related	[flat|nested] 69+ messages in thread

end of thread, other threads:[~2013-10-02 12:43 UTC | newest]

Thread overview: 69+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-09 13:57 [gentoo-commits] proj/genkernel:ryao commit in: defaults/ Richard Yao
2013-06-09 13:48 ` [gentoo-commits] proj/genkernel:master " Richard Yao
  -- strict thread matches above, loose matches on Subject: below --
2013-10-02 12:43 [gentoo-commits] proj/genkernel:ryao " Richard Yao
2013-06-09 13:57 Richard Yao
2013-06-09 13:57 Richard Yao
2013-06-09 13:57 Richard Yao
2013-06-09 13:57 Richard Yao
2013-06-09 13:57 Richard Yao
2013-06-09 13:57 [gentoo-commits] proj/genkernel:master " Richard Yao
2013-06-09 13:57 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
2013-06-09 13:57 [gentoo-commits] proj/genkernel:master " Richard Yao
2013-06-09 13:57 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
2013-06-09 13:48 [gentoo-commits] proj/genkernel:master " Richard Yao
2013-06-09 13:57 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
2013-06-09 13:40 Richard Yao
2013-06-09 13:40 Richard Yao
2013-06-09 13:40 Richard Yao
2013-06-09 13:40 Richard Yao
2013-06-09 13:40 Richard Yao
2013-06-09 13:40 Richard Yao
2013-06-09 13:37 Richard Yao
2013-06-09 13:37 Richard Yao
2013-06-09 13:37 Richard Yao
2013-06-09 13:36 Richard Yao
2013-06-09 13:36 Richard Yao
2013-06-09 13:33 Richard Yao
2013-06-09 13:33 Richard Yao
2013-06-09 13:33 Richard Yao
2013-06-09 13:33 Richard Yao
2013-06-09 13:33 Richard Yao
2013-06-09 13:33 Richard Yao
2013-06-09 13:21 Richard Yao
2013-06-09 13:17 Richard Yao
2013-06-09 13:17 Richard Yao
2013-06-09 13:17 Richard Yao
2013-06-09 13:17 Richard Yao
2013-06-09 13:15 Richard Yao
2013-06-09 13:15 Richard Yao
2013-06-09 12:29 Richard Yao
2013-06-09 12:11 Richard Yao
2013-06-09 11:56 Richard Yao
2013-06-09 11:51 Richard Yao
2013-06-09 11:47 Richard Yao
2013-06-09 11:43 Richard Yao
2013-06-09 10:28 Richard Yao
2013-06-09 10:05 Richard Yao
2013-06-09 10:02 Richard Yao
2013-06-09  9:58 Richard Yao
2013-06-09  9:58 Richard Yao
2013-06-09  9:58 Richard Yao
2013-06-09  9:53 Richard Yao
2013-06-09  9:49 Richard Yao
2013-06-09  9:49 Richard Yao
2013-06-09  9:46 Richard Yao
2013-06-09  9:44 Richard Yao
2013-06-09  9:44 Richard Yao
2013-06-09  8:32 Richard Yao
2013-06-09  7:45 Richard Yao
2013-06-09  6:43 Richard Yao
2013-06-06  3:36 Richard Yao
2013-06-03 23:49 Richard Yao
2013-06-03 23:35 Richard Yao
2013-06-03 23:35 Richard Yao
2013-06-03 23:35 Richard Yao
2013-06-03 23:35 Richard Yao
2013-06-03 23:35 Richard Yao
2013-06-03 23:35 Richard Yao
2013-01-01 16:53 Richard Yao
2012-11-22 22:20 Richard Yao
2012-11-22 22:20 [gentoo-commits] proj/genkernel:master " Richard Yao
2013-01-01 16:53 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
2012-11-11 17:04 [gentoo-commits] proj/genkernel:master " Richard Yao
2012-11-11 17:32 ` [gentoo-commits] proj/genkernel:ryao " Richard Yao
2012-11-05 18:30 Richard Yao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox