summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/initramfs/scripts/zfs27
1 files changed, 17 insertions, 10 deletions
diff --git a/contrib/initramfs/scripts/zfs b/contrib/initramfs/scripts/zfs
index dc01db11e..8cdef0b54 100644
--- a/contrib/initramfs/scripts/zfs
+++ b/contrib/initramfs/scripts/zfs
@@ -64,13 +64,13 @@ find_rootfs()
{
local pool="$1"
+ # If 'POOL_IMPORTED' isn't set, no pool imported and therefor
+ # we won't be able to find a root fs.
+ [ -z "${POOL_IMPORTED}" ] && return 1
+
# If it's already specified, just keep it mounted and exit
# User (kernel command line) must be correct.
- if [ -n "${ZFS_BOOTFS}" ]
- then
- POOL_IMPORTED=1
- return 0
- fi
+ [ -n "${ZFS_BOOTFS}" ] && return 0
# Not set, try to find it in the 'bootfs' property of the pool.
# NOTE: zpool does not support 'get -H -ovalue bootfs'...
@@ -87,6 +87,7 @@ find_rootfs()
# Not boot fs here, export it and later try again..
"${ZPOOL}" export "$pool"
+ POOL_IMPORTED=""
return 1
}
@@ -229,12 +230,16 @@ import_pool()
then
[ "$quiet" != "y" ] && zfs_log_failure_msg "${ZFS_ERROR}"
- [ "$quiet" != "y" ] && zfs_log_begin_msg \
- "Importing pool '${pool}' using cachefile."
+ if [ -f "${ZPOOL_CACHE}" ]
+ then
+ [ "$quiet" != "y" ] && zfs_log_begin_msg \
+ "Importing pool '${pool}' using cachefile."
+
+ ZFS_CMD="${ZPOOL} import -c ${ZPOOL_CACHE} -N ${ZPOOL_FORCE}"
+ ZFS_STDERR="$($ZFS_CMD "$pool" 2>&1)"
+ ZFS_ERROR="$?"
+ fi
- ZFS_CMD="${ZPOOL} import -c ${ZPOOL_CACHE} -N ${ZPOOL_FORCE}"
- ZFS_STDERR="$($ZFS_CMD "$pool" 2>&1)"
- ZFS_ERROR="$?"
if [ "${ZFS_ERROR}" != 0 ]
then
[ "$quiet" != "y" ] && zfs_log_failure_msg "${ZFS_ERROR}"
@@ -252,6 +257,8 @@ import_pool()
fi
[ "$quiet" != "y" ] && zfs_log_end_msg
+
+ POOL_IMPORTED=1
return 0
}