aboutsummaryrefslogtreecommitdiff
path: root/sys/nfs
diff options
context:
space:
mode:
authorBrandon Bergren <bdragon@FreeBSD.org>2021-03-28 00:18:51 +0000
committerBrandon Bergren <bdragon@FreeBSD.org>2021-03-28 19:02:40 +0000
commit98727c6cd11edb10617be0f421e485e0223185a5 (patch)
tree570356226b3dc620e973e5cad0420a06ff6967b4 /sys/nfs
parentb218441ac074d9cb9417e284980bf87f79a89585 (diff)
downloadsrc-98727c6cd11edb10617be0f421e485e0223185a5.tar.gz
src-98727c6cd11edb10617be0f421e485e0223185a5.zip
Fix panic when using BOOTP to resolve root path.
When loading a direct-boot kernel, a temporary route is being installed, the NFS handle is acquired, and the temporary route is removed again. This was being done inside a net epoch, but since the krpc code is written using blocking APIs, we can't actually do that, because sleeping is not allowed during a net epoch. Exit and reenter the epoch so we are only in the epoch when doing the routing table manipulation. Fixes panic when booting my RB800 over NFS (where the kernel is loaded using RouterBOOT directly.) Reviewed by: melifaro Sponsored by: Tag1 Consulting, Inc. Differential Revision: https://reviews.freebsd.org/D29464
Diffstat (limited to 'sys/nfs')
-rw-r--r--sys/nfs/bootp_subr.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/nfs/bootp_subr.c b/sys/nfs/bootp_subr.c
index fd0e0653a02c..2386a23084da 100644
--- a/sys/nfs/bootp_subr.c
+++ b/sys/nfs/bootp_subr.c
@@ -1682,9 +1682,11 @@ retry:
NET_EPOCH_ENTER(et);
bootpc_add_default_route(ifctx);
+ NET_EPOCH_EXIT(et);
error = md_mount(&nd->root_saddr, nd->root_hostnam,
nd->root_fh, &nd->root_fhsize,
&nd->root_args, td);
+ NET_EPOCH_ENTER(et);
bootpc_remove_default_route(ifctx);
NET_EPOCH_EXIT(et);
if (error != 0) {