i-t: fix root=zfs:AUTO

IFS= would break loops in import_pool(), which would fault
any automatic import

Additionally $ZFS_BOOTFS from cmdline would interfere with find_rootfs()

If many pools were present, same thing could happen across multiple
find_rootfs() runs, so bail out early and clean up in error path

Suggested-by: @nachtgeist
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #11278
Closes #11838
This commit is contained in:
наб 2021-04-03 18:18:39 +02:00 committed by Brian Behlendorf
parent 1bb4b5a5ae
commit 46aec6d439
1 changed files with 9 additions and 4 deletions

View File

@ -94,8 +94,8 @@ find_rootfs()
# Not boot fs here, export it and later try again.. # Not boot fs here, export it and later try again..
"${ZPOOL}" export "$pool" "${ZPOOL}" export "$pool"
POOL_IMPORTED="" POOL_IMPORTED=
ZFS_BOOTFS=
return 1 return 1
} }
@ -815,6 +815,11 @@ mountroot()
then then
# Try to detect both pool and root fs. # Try to detect both pool and root fs.
# If we got here, that means we don't have a hint so as to
# the root dataset, but with root=zfs:AUTO on cmdline,
# this says "zfs:AUTO" here and interferes with checks later
ZFS_BOOTFS=
[ "$quiet" != "y" ] && \ [ "$quiet" != "y" ] && \
zfs_log_begin_msg "Attempting to import additional pools." zfs_log_begin_msg "Attempting to import additional pools."
@ -832,8 +837,8 @@ mountroot()
do do
[ -z "$pool" ] && continue [ -z "$pool" ] && continue
import_pool "$pool" IFS="$OLD_IFS" import_pool "$pool"
find_rootfs "$pool" IFS="$OLD_IFS" find_rootfs "$pool" && break
done done
IFS="$OLD_IFS" IFS="$OLD_IFS"