From 2976b7f19f5ac80a649d5e587cb92a7cb2d0899a Mon Sep 17 00:00:00 2001 From: David Greenman Date: Fri, 19 May 1995 03:27:08 +0000 Subject: [PATCH] NFS diskless operation was broken because swapdev_vp wasn't initialized. These changes solve the problem in a general way by moving the initialization out of the individual fs_mountroot's and into swaponvp(). Submitted by: Poul-Henning Kamp --- sys/fs/cd9660/cd9660_vfsops.c | 8 ++++---- sys/isofs/cd9660/cd9660_vfsops.c | 8 ++++---- sys/kern/init_main.c | 4 ++-- sys/ufs/ffs/ffs_vfsops.c | 8 ++++---- sys/ufs/mfs/mfs_vfsops.c | 8 ++++---- sys/vm/vm_swap.c | 7 ++++++- 6 files changed, 24 insertions(+), 19 deletions(-) diff --git a/sys/fs/cd9660/cd9660_vfsops.c b/sys/fs/cd9660/cd9660_vfsops.c index 225e35f50ba3..8fc30a85e385 100644 --- a/sys/fs/cd9660/cd9660_vfsops.c +++ b/sys/fs/cd9660/cd9660_vfsops.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)cd9660_vfsops.c 8.3 (Berkeley) 1/31/94 - * $Id: cd9660_vfsops.c,v 1.10 1995/01/16 17:03:27 joerg Exp $ + * $Id: cd9660_vfsops.c,v 1.11 1995/03/16 20:23:24 wollman Exp $ */ #include @@ -94,10 +94,10 @@ cd9660_mountroot() struct iso_args args; /* - * Get vnodes for swapdev and rootdev. + * Get vnode for rootdev. */ - if (bdevvp(swapdev, &swapdev_vp) || bdevvp(rootdev, &rootvp)) - panic("cd9660_mountroot: can't setup bdevvp's"); + if (bdevvp(rootdev, &rootvp)) + panic("cd9660_mountroot: can't setup bdevvp for rootdev"); mp = malloc((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK); bzero((char *)mp, (u_long)sizeof(struct mount)); diff --git a/sys/isofs/cd9660/cd9660_vfsops.c b/sys/isofs/cd9660/cd9660_vfsops.c index 225e35f50ba3..8fc30a85e385 100644 --- a/sys/isofs/cd9660/cd9660_vfsops.c +++ b/sys/isofs/cd9660/cd9660_vfsops.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)cd9660_vfsops.c 8.3 (Berkeley) 1/31/94 - * $Id: cd9660_vfsops.c,v 1.10 1995/01/16 17:03:27 joerg Exp $ + * $Id: cd9660_vfsops.c,v 1.11 1995/03/16 20:23:24 wollman Exp $ */ #include @@ -94,10 +94,10 @@ cd9660_mountroot() struct iso_args args; /* - * Get vnodes for swapdev and rootdev. + * Get vnode for rootdev. */ - if (bdevvp(swapdev, &swapdev_vp) || bdevvp(rootdev, &rootvp)) - panic("cd9660_mountroot: can't setup bdevvp's"); + if (bdevvp(rootdev, &rootvp)) + panic("cd9660_mountroot: can't setup bdevvp for rootdev"); mp = malloc((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK); bzero((char *)mp, (u_long)sizeof(struct mount)); diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 41aefb97e5a4..89874b23d0ec 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)init_main.c 8.9 (Berkeley) 1/21/94 - * $Id: init_main.c,v 1.23 1995/05/04 08:21:24 davidg Exp $ + * $Id: init_main.c,v 1.24 1995/05/14 02:59:55 davidg Exp $ */ #include @@ -94,7 +94,7 @@ struct proc *initproc, *pageproc, *updateproc, *vmproc; int cmask = CMASK; extern struct user *proc0paddr; -struct vnode *rootvp, *swapdev_vp; +struct vnode *rootvp; int boothowto; struct timeval boottime; struct timeval runtime; diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c index 6bf3a83489c7..a52ddd50997b 100644 --- a/sys/ufs/ffs/ffs_vfsops.c +++ b/sys/ufs/ffs/ffs_vfsops.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)ffs_vfsops.c 8.8 (Berkeley) 4/18/94 - * $Id: ffs_vfsops.c,v 1.18 1995/05/01 23:20:24 dyson Exp $ + * $Id: ffs_vfsops.c,v 1.19 1995/05/15 08:39:37 davidg Exp $ */ #include @@ -105,10 +105,10 @@ ffs_mountroot() int error; /* - * Get vnodes for swapdev and rootdev. + * Get vnode for rootdev. */ - if (bdevvp(swapdev, &swapdev_vp) || bdevvp(rootdev, &rootvp)) - panic("ffs_mountroot: can't setup bdevvp's"); + if (bdevvp(rootdev, &rootvp)) + panic("ffs_mountroot: can't setup bdevvp for root"); mp = malloc((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK); bzero((char *)mp, (u_long)sizeof(struct mount)); diff --git a/sys/ufs/mfs/mfs_vfsops.c b/sys/ufs/mfs/mfs_vfsops.c index d00f9f9b58cc..aa57ffde2c47 100644 --- a/sys/ufs/mfs/mfs_vfsops.c +++ b/sys/ufs/mfs/mfs_vfsops.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)mfs_vfsops.c 8.4 (Berkeley) 4/16/94 - * $Id: mfs_vfsops.c,v 1.6 1995/03/16 18:16:54 bde Exp $ + * $Id: mfs_vfsops.c,v 1.7 1995/04/25 03:39:50 phk Exp $ */ #include @@ -101,10 +101,10 @@ mfs_mountroot() int error; /* - * Get vnodes for swapdev and rootdev. + * Get vnode for rootdev. */ - if (bdevvp(swapdev, &swapdev_vp) || bdevvp(rootdev, &rootvp)) - panic("mfs_mountroot: can't setup bdevvp's"); + if (bdevvp(rootdev, &rootvp)) + panic("mfs_mountroot: can't setup bdevvp for rootdev"); mp = malloc((u_long)sizeof(struct mount), M_MOUNT, M_WAITOK); bzero((char *)mp, (u_long)sizeof(struct mount)); diff --git a/sys/vm/vm_swap.c b/sys/vm/vm_swap.c index d66fb018c1e5..2191a732efd6 100644 --- a/sys/vm/vm_swap.c +++ b/sys/vm/vm_swap.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)vm_swap.c 8.5 (Berkeley) 2/17/94 - * $Id: vm_swap.c,v 1.17 1995/05/14 03:00:10 davidg Exp $ + * $Id: vm_swap.c,v 1.18 1995/05/18 05:09:54 davidg Exp $ */ #include @@ -58,6 +58,7 @@ #endif static struct swdevt should_be_malloced[NSWAPDEV]; struct swdevt *swdevt = should_be_malloced; +struct vnode *swapdev_vp; int nswap; /* first block after the interleaved devs */ int nswdev = NSWAPDEV; int vm_swap_size; @@ -249,5 +250,9 @@ swaponvp(p, vp, dev, nblks) rlist_free(&swaplist, vsbase, vsbase + blk - 1); vm_swap_size += blk; } + + if (!swapdev_vp && bdevvp(swapdev, &swapdev_vp)) + panic("Cannot get vnode for swapdev"); + return (0); }