aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Yao <ryao@gentoo.org>2015-09-20 15:29:35 -0400
committerRichard Yao <ryao@gentoo.org>2015-09-20 15:29:35 -0400
commit7b805055ce3b1f211ae64905d2ee7d8898e880fd (patch)
treee7e1469580247c9d73e9dc2dac894639cbdd01de
parentImprove upon patch to read zpool.cache from the root pool at boot (diff)
downloadgenkernel-7b805055ce3b1f211ae64905d2ee7d8898e880fd.tar.gz
genkernel-7b805055ce3b1f211ae64905d2ee7d8898e880fd.tar.bz2
genkernel-7b805055ce3b1f211ae64905d2ee7d8898e880fd.zip
Further ZFS boot improvements
Signed-off-by: Richard Yao <ryao@gentoo.org>
-rw-r--r--defaults/initrd.scripts14
1 files changed, 13 insertions, 1 deletions
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 9c0c290..d1bb0bc 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -1034,10 +1034,22 @@ startVolumes() {
elif [ -z "${ZFS_POOL}" ]
then
bad_msg "Please boot with root=ZFS=\$DATASET"
+ # startVolumes is called twice for LUKS assembly.
+ # Devices are not accessed until mount, so become a no-op.
+ # We fall through from the waitForZFS call rather than stopping
+ # sooner so that initramfs archives where the zpool.cache file
+ # has been included are protected against races.
+ elif [ -f /etc/zfs/zpool.cache ]
+ then
+ :
elif /sbin/zpool import -f -N -o readonly=on "${ZFS_POOL}" 2>&1 >/dev/null
then
mkdir -p /tmp/zfs
- mount -o ro,zfsutil -t zfs "${REAL_ROOT#*=}" /tmp/zfs
+ /sbin/mount.zfs -o ro,zfsutil "${REAL_ROOT#*=}" /tmp/zfs 2>&1 >/dev/null
+ if [ $? -ne 0 ]
+ bad_msg "Failed to mount ${REAL_ROOT#*=}"
+ return 1
+ fi
# Copy important files to /etc/zfs
for i in zpool.cache zdev.conf