From 48282fba0708f040c0c8c60a7195f9669fc79622 Mon Sep 17 00:00:00 2001 From: phk Date: Sun, 2 Mar 2003 14:37:52 +0000 Subject: NO_GEOM cleanup: Use VOP_IOCTL(DIOCGMEDIASIZE) to check the size of a potential swap device instead of the cdevsw->d_psize() method. --- sys/vm/vm_swap.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'sys/vm') diff --git a/sys/vm/vm_swap.c b/sys/vm/vm_swap.c index 2c3cfde..f968838 100644 --- a/sys/vm/vm_swap.c +++ b/sys/vm/vm_swap.c @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -283,6 +284,7 @@ swaponvp(td, vp, dev, nblks) swblk_t dvbase; int error; u_long aligned_nblks; + off_t mediasize; if (!swapdev_vp) { error = getnewvnode("none", NULL, swapdev_vnodeop_p, @@ -312,11 +314,16 @@ swaponvp(td, vp, dev, nblks) if (error) return (error); - if (nblks == 0 && dev != NODEV && (devsw(dev)->d_psize == 0 || - (nblks = (*devsw(dev)->d_psize) (dev)) == -1)) { - (void) VOP_CLOSE(vp, FREAD | FWRITE, td->td_ucred, td); - return (ENXIO); - } + error = VOP_IOCTL(vp, DIOCGMEDIASIZE, (caddr_t)&mediasize, + FREAD, td->td_ucred, td); + if (error == 0) + nblks = mediasize / DEV_BSIZE; + else + nblks = 0; + /* + * XXX: We should also check that the sectorsize makes sense + * XXX: it should be a power of two, no larger than the page size. + */ if (nblks == 0) { (void) VOP_CLOSE(vp, FREAD | FWRITE, td->td_ucred, td); return (ENXIO); -- cgit v1.1