diff options
author | phk <phk@FreeBSD.org> | 2003-03-02 14:37:52 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2003-03-02 14:37:52 +0000 |
commit | 48282fba0708f040c0c8c60a7195f9669fc79622 (patch) | |
tree | 5aceb0553363d1def951b84e3748b340981849ff /sys/vm | |
parent | 3dee40a992d6f8ab4b3b349ea3d2781d756273c4 (diff) | |
download | FreeBSD-src-48282fba0708f040c0c8c60a7195f9669fc79622.zip FreeBSD-src-48282fba0708f040c0c8c60a7195f9669fc79622.tar.gz |
NO_GEOM cleanup:
Use VOP_IOCTL(DIOCGMEDIASIZE) to check the size of a potential swap device
instead of the cdevsw->d_psize() method.
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vm_swap.c | 17 |
1 files changed, 12 insertions, 5 deletions
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 <sys/kernel.h> #include <sys/lock.h> #include <sys/conf.h> +#include <sys/disk.h> #include <sys/stat.h> #include <sys/sysctl.h> #include <sys/mac.h> @@ -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); |