+#endif /* NO_MOUNT_PRIVATE */
+failed:
+ thread_funnel_switch(NETWORK_FUNNEL, KERNEL_FUNNEL);
+failed_noswitch:
+ return (error);
+}
+
+/*
+ * Called with a partially initialized nfs_diskless struct
+ * with file handles to be filled in.
+ */
+int
+nfs_boot_getfh(nd, procp, v3)
+ struct nfs_diskless *nd;
+ struct proc *procp;
+ int v3;
+{
+ int error = 0;
+
+ thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
+
+ nd->nd_root.ndm_nfsv3 = v3;
+ error = get_file_handle(&nd->nd_root);
+ if (error) {
+ printf("nfs_boot: get_file_handle(v%d) root failed, %d\n",
+ v3 ? 3 : 2, error);
+ goto failed;
+ }
+
+#if !defined(NO_MOUNT_PRIVATE)
+ if (nd->nd_private.ndm_saddr.sin_addr.s_addr) {
+ /* get private file handle */
+ nd->nd_private.ndm_nfsv3 = v3;
+ error = get_file_handle(&nd->nd_private);
+ if (error) {
+ printf("nfs_boot: get_file_handle(v%d) private failed, %d\n",
+ v3 ? 3 : 2, error);
+ goto failed;
+ }
+ }
+#endif /* NO_MOUNT_PRIVATE */