1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-14 10:09:48 +00:00

Isolate the swapdev_vp "not quite" vnode in the only source file which

needs it now that /dev/drum is gone.

Reviewed by: eivind, peter
This commit is contained in:
Poul-Henning Kamp 1999-11-22 15:27:09 +00:00
parent 0171aaede2
commit 24e7ab7c0b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=53594
2 changed files with 11 additions and 35 deletions

View File

@ -120,6 +120,8 @@ static struct swblock **swhash;
static int swhash_mask;
static int swap_async_max = 4; /* maximum in-progress async I/O's */
static struct vnode *swapdev_vp; /* XXX: This is not quite a real vnode */
SYSCTL_INT(_vm, OID_AUTO, swap_async_max,
CTLFLAG_RW, &swap_async_max, 0, "Maximum running async swap ops");
@ -326,6 +328,11 @@ swap_pager_swap_init()
bzero(swhash, sizeof(struct swblock *) * n);
swhash_mask = n - 1;
n = getnewvnode(VT_NON, NULL, spec_vnodeop_p, &swapdev_vp);
if (n)
panic("Cannot get vnode for swapdev");
swapdev_vp->v_type = VBLK;
}
/*

View File

@ -63,7 +63,6 @@
#endif
static struct swdevt should_be_malloced[NSWAPDEV];
static struct swdevt *swdevt = should_be_malloced;
struct vnode *swapdev_vp;
static int nswap; /* first block after the interleaved devs */
static int nswdev = NSWAPDEV;
int vm_swap_size;
@ -162,7 +161,6 @@ swapon(p, uap)
struct swapon_args *uap;
{
register struct vnode *vp;
dev_t dev;
struct nameidata nd;
int error;
@ -177,33 +175,11 @@ swapon(p, uap)
vp = nd.ni_vp;
switch (vp->v_type) {
case VBLK:
dev = vp->v_rdev;
if (devsw(dev) == NULL) {
error = ENXIO;
break;
}
error = swaponvp(p, vp, dev, 0);
break;
case VCHR:
/*
* For now, we disallow swapping to regular files.
* It requires logical->physcal block translation
* support in the swap pager before it will work.
*/
if (!vn_isdisk(vp))
error = ENOTBLK;
break;
#if 0
error = VOP_GETATTR(vp, &attr, p->p_ucred, p);
if (!error)
error = swaponvp(p, vp, NODEV, attr.va_size / DEV_BSIZE);
break;
#endif
default:
error = EINVAL;
break;
}
if (!error)
error = swaponvp(p, vp, vp->v_rdev, 0);
if (error)
vrele(vp);
@ -296,12 +272,5 @@ swaponvp(p, vp, dev, nblks)
vm_swap_size += blk;
}
if (!swapdev_vp) {
error = getnewvnode(VT_NON, (struct mount *) 0,
spec_vnodeop_p, &swapdev_vp);
if (error)
panic("Cannot get vnode for swapdev");
swapdev_vp->v_type = VBLK;
}
return (0);
}