diff options
author | Turbo Fredriksson <[email protected]> | 2015-07-27 17:09:02 +0200 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-07-28 13:29:28 -0700 |
commit | 21d41d6806edce8217dfd5d16e74a6a8a4f5fe1b (patch) | |
tree | 5b310d1bcc0b2e2fe68cbe2bf2aa904546f87f25 /contrib/initramfs/scripts/zfs | |
parent | 48511ea6454224bc96ac518501a89ba52d7a5102 (diff) |
Make sure that POOL_IMPORTED is set, unset and checked where appropriate.
* If it's unset in find_rootfs(), no pool is imported so no point in
looking for a rootfs.
* If find_rootfs() couldn't find a rootfs, the pool is exported. Remember
to unset POOL_IMPORTED after doing so.
* Set POOL_IMPORTED if/when a pool have been imported in import_pool().
* Improve backup import (the one using cache file).
Signed-off-by: Turbo Fredriksson <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #3636
Diffstat (limited to 'contrib/initramfs/scripts/zfs')
-rw-r--r-- | contrib/initramfs/scripts/zfs | 27 |
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 } |