diff options
author | Colin Percival <cperciva@FreeBSD.org> | 2021-12-20 17:55:36 +0000 |
---|---|---|
committer | Colin Percival <cperciva@FreeBSD.org> | 2021-12-29 20:41:09 +0000 |
commit | 33812d60b9601d7ef8a7222c063696bfd6a77f41 (patch) | |
tree | a3f08fa440b50c025758db362ee0848a047fa1be | |
parent | 19a172158cc12b3bdd848fead732f2151c36e526 (diff) | |
download | src-33812d60b9601d7ef8a7222c063696bfd6a77f41.tar.gz src-33812d60b9601d7ef8a7222c063696bfd6a77f41.zip |
vfs_mountroot: Check for root dev before waiting
If GEOM is idle but the root device is not yet present when we enter
vfs_mountroot_wait_if_necessary, we call vfs_mountroot_wait to wait
for root holds (e.g. CAM or USB initialization). Upon returning from
vfs_mountroot_wait, we wait 100 ms at a time until the root device
shows up.
Since the root device most likely appeared during vfs_mountroot_wait
-- waiting for subsystems which may be responsible for the root
device is the whole purpose of that function -- it makes sense to
check if the device is now present rather than printing a warning
and pausing for 100 ms before checking.
Reviewed by: trasz
Fixes: a3ba3d09c248 Make root mount wait mechanism smarter
Sponsored by: https://www.patreon.com/cperciva
Differential Revision: https://reviews.freebsd.org/D33593
-rw-r--r-- | sys/kern/vfs_mountroot.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/vfs_mountroot.c b/sys/kern/vfs_mountroot.c index 6257f9592d86..d8ad5cf2989b 100644 --- a/sys/kern/vfs_mountroot.c +++ b/sys/kern/vfs_mountroot.c @@ -1040,6 +1040,8 @@ vfs_mountroot_wait_if_neccessary(const char *fs, const char *dev) * to behave exactly as it used to work before. */ vfs_mountroot_wait(); + if (parse_mount_dev_present(dev)) + return (0); printf("mountroot: waiting for device %s...\n", dev); delay = hz / 10; timeout = root_mount_timeout * hz; |