summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2011-06-30 14:45:33 -0700
committerBrian Behlendorf <[email protected]>2011-06-30 14:45:33 -0700
commit2a005961a48e748632e96272915192dab6ce9401 (patch)
tree52aaace193c3787086a1877648570c96a3f22095
parent218b8eafbdcb9bc19fc5a252fdd411fde11bca48 (diff)
Ensure all block devices are available
These days most disk drivers will probe for devices asynchronously. This means it's possible that when you zfs init script runs all the required block devices may not yet have been discovered. The result is the pool may fail to cleanly import at boot time. This is particularly common when you have a large number of devices. The fix is for the init script to block until udev settles and we are no longer detecting new devices. Once the system has settled the zfs modules can be loaded and the pool with be automatically imported.
-rw-r--r--etc/init.d/zfs.fedora3
-rw-r--r--etc/init.d/zfs.gentoo4
-rw-r--r--etc/init.d/zfs.lsb3
-rw-r--r--etc/init.d/zfs.lunar3
-rw-r--r--etc/init.d/zfs.redhat3
5 files changed, 16 insertions, 0 deletions
diff --git a/etc/init.d/zfs.fedora b/etc/init.d/zfs.fedora
index 69df621e3..bfed452ad 100644
--- a/etc/init.d/zfs.fedora
+++ b/etc/init.d/zfs.fedora
@@ -126,6 +126,9 @@ start()
action $"SELinux ZFS policy required: " /bin/false || return 6
fi
+ # Delay until all required block devices are present.
+ udevadm settle
+
# load kernel module infrastructure
if ! grep -q zfs /proc/modules ; then
action $"Loading kernel ZFS infrastructure: " modprobe zfs || return 5
diff --git a/etc/init.d/zfs.gentoo b/etc/init.d/zfs.gentoo
index c9c5d8502..a33d9dc29 100644
--- a/etc/init.d/zfs.gentoo
+++ b/etc/init.d/zfs.gentoo
@@ -41,6 +41,10 @@ checksystem() {
start() {
ebegin "Starting ZFS"
checksystem || return 1
+
+ # Delay until all required block devices are present.
+ udevadm settle
+
if [ ! -c /dev/zfs ]; then
modprobe $ZFS_MODULE
rv=$?
diff --git a/etc/init.d/zfs.lsb b/etc/init.d/zfs.lsb
index a84c1df23..6c0a743cc 100644
--- a/etc/init.d/zfs.lsb
+++ b/etc/init.d/zfs.lsb
@@ -50,6 +50,9 @@ start()
return 4
fi
+ # Delay until all required block devices are present.
+ udevadm settle
+
# Load the zfs module stack
/sbin/modprobe zfs
diff --git a/etc/init.d/zfs.lunar b/etc/init.d/zfs.lunar
index c7aa1edb4..4512151c2 100644
--- a/etc/init.d/zfs.lunar
+++ b/etc/init.d/zfs.lunar
@@ -13,6 +13,9 @@
case $1 in
start) echo "$1ing ZFS filesystems"
+ # Delay until all required block devices are present.
+ udevadm settle
+
if ! grep "zfs" /proc/modules > /dev/null; then
echo "ZFS kernel module not loaded yet; loading...";
if ! modprobe zfs; then
diff --git a/etc/init.d/zfs.redhat b/etc/init.d/zfs.redhat
index 99ff80e92..3f34f2feb 100644
--- a/etc/init.d/zfs.redhat
+++ b/etc/init.d/zfs.redhat
@@ -76,6 +76,9 @@ start()
action $"SELinux ZFS policy required: " /bin/false || return 6
fi
+ # Delay until all required block devices are present.
+ udevadm settle
+
# load kernel module infrastructure
if ! grep -q zfs /proc/modules ; then
action $"Loading kernel ZFS infrastructure: " modprobe zfs || return 5