git: d878a66a9a77 - stable/13 - wait for device mounts in zpool and dumpon
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 19 Nov 2022 17:42:09 UTC
The branch stable/13 has been updated by chuck: URL: https://cgit.FreeBSD.org/src/commit/?id=d878a66a9a77fc67801000bfab8fa77b2b3faecc commit d878a66a9a77fc67801000bfab8fa77b2b3faecc Author: Chuck Tuffli <chuck@FreeBSD.org> AuthorDate: 2021-03-05 16:13:23 +0000 Commit: Chuck Tuffli <chuck@FreeBSD.org> CommitDate: 2022-11-19 17:40:48 +0000 wait for device mounts in zpool and dumpon If the root file system is composed from multiple devices, wait for devices to be ready before running zpool and dumpon rc scripts. An example of this is if the bulk of the root file system exists on a fast device (e.g. NVMe) but the /var directory comes from a ZFS dataset on a slower device (e.g. SATA). In this case, it is possible that the zpool import may run before the slower device has finished being probed, leaving the system in an intermediate state. Fix is to add root_hold_wait to the zpool and dumpon (which has a similar issue) rc scripts. PR: 242189 (cherry picked from commit f30f11f878fe2aa535cd286810d31c92793a3d95) --- libexec/rc/rc.d/dumpon | 2 ++ libexec/rc/rc.d/zpool | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libexec/rc/rc.d/dumpon b/libexec/rc/rc.d/dumpon index a1132c78da68..6ca335b73842 100755 --- a/libexec/rc/rc.d/dumpon +++ b/libexec/rc/rc.d/dumpon @@ -55,6 +55,7 @@ dumpon_start() [Nn][Oo] | '') ;; [Aa][Uu][Tt][Oo]) + root_hold_wait dev=$(/bin/kenv -q dumpdev) if [ -n "${dev}" ] ; then dumpon_try "${dev}" @@ -75,6 +76,7 @@ dumpon_start() return 1 ;; *) + root_hold_wait dumpon_try "${dumpdev}" ;; esac diff --git a/libexec/rc/rc.d/zpool b/libexec/rc/rc.d/zpool index f98693f2cb13..e73c2b7e5b73 100755 --- a/libexec/rc/rc.d/zpool +++ b/libexec/rc/rc.d/zpool @@ -22,7 +22,14 @@ zpool_start() for cachefile in /etc/zfs/zpool.cache /boot/zfs/zpool.cache; do if [ -r $cachefile ]; then - zpool import -c $cachefile -a -N && break + zpool import -c $cachefile -a -N + if [ $? -ne 0 ]; then + echo "Import of zpool cache ${cachefile} failed," \ + "will retry after root mount hold release" + root_hold_wait + zpool import -c $cachefile -a -N + fi + break fi done }