-call nfs_boot_cleanup() if mount failed

-g/c diskless swap initialization
This commit is contained in:
drochner 1999-02-21 15:11:09 +00:00
parent 27098b1199
commit 33ed457810

View File

@ -1,4 +1,4 @@
/* $NetBSD: nfs_vfsops.c,v 1.79 1998/11/12 22:31:02 fvdl Exp $ */
/* $NetBSD: nfs_vfsops.c,v 1.80 1999/02/21 15:11:09 drochner Exp $ */
/*
* Copyright (c) 1989, 1993, 1995
@ -307,8 +307,10 @@ nfs_mountroot()
nd = malloc(sizeof(*nd), M_NFSMNT, M_WAITOK);
memset((caddr_t)nd, 0, sizeof(*nd));
error = nfs_boot_init(nd, procp);
if (error)
goto out;
if (error) {
free(nd, M_NFSMNT);
return (error);
}
/*
* Create the root mount point.
@ -338,73 +340,9 @@ nfs_mountroot()
#endif
inittodr(n);
#if 0
/*
* XXX splnet, so networks will receive...
* XXX Which port needed this hack?
* XXX Should already be at spl0.
*/
splnet();
#endif
#if 0 /* swap now comes in from swapctl(2) */
#ifdef notyet
/* Set up swap credentials. */
proc0.p_ucred->cr_uid = 0;
proc0.p_ucred->cr_gid = 0;
proc0.p_ucred->cr_ngroups = 0;
#endif
/*
* "Mount" the swap device.
*
* On a "dataless" configuration (swap on disk) we will have:
* (swdevt[0].sw_dev != NODEV) identifying the swap device.
*/
if (bdevvp(swapdev, &swapdev_vp))
panic("nfs_mountroot: can't setup swap vp");
if (swdevt[0].sw_dev != NODEV) {
printf("swap on device 0x%x\n", swdevt[0].sw_dev);
error = 0;
goto out;
}
/*
* If swapping to an nfs node: (swdevt[0].sw_dev == NODEV)
* Create a fake mount point just for the swap vnode so that the
* swap file can be on a different server from the rootfs.
*/
error = nfs_mount_diskless(&nd->nd_swap, "/swap", &mp, &vp, procp);
if (error) {
printf("nfs_boot: warning: mount(swap), error=%d\n", error);
error = 0;
goto out;
}
vfs_unbusy(mp);
printf("swap on %s\n", nd->nd_swap.ndm_host);
/*
* Since the swap file is not the root dir of a file system,
* hack it to a regular file.
*/
vp->v_type = VREG;
vp->v_flag = 0;
swdevt[0].sw_vp = vp;
/*
* Find out how large the swap file is.
*/
error = VOP_GETATTR(vp, &attr, procp->p_ucred, procp);
if (error)
panic("nfs_mountroot: getattr for swap");
n = (long) (attr.va_size >> DEV_BSHIFT);
#ifdef DEBUG
printf("swap size: 0x%lx (blocks)\n", n);
#endif
swdevt[0].sw_nblks = n;
#endif
out:
if (error)
nfs_boot_cleanup(nd, procp);
free(nd, M_NFSMNT);
return (error);
}