115 lines
3.6 KiB
Plaintext
115 lines
3.6 KiB
Plaintext
*** spec_vnops.c.orig Thu Jun 9 20:16:12 1994
|
|
--- spec_vnops.c Sat Jun 18 17:14:49 1994
|
|
***************
|
|
*** 217,223 ****
|
|
struct proc *p = uio->uio_procp;
|
|
struct buf *bp;
|
|
daddr_t bn, nextbn;
|
|
! long bsize, bscale;
|
|
struct partinfo dpart;
|
|
int n, on, majordev, (*ioctl)();
|
|
int error = 0;
|
|
--- 217,223 ----
|
|
struct proc *p = uio->uio_procp;
|
|
struct buf *bp;
|
|
daddr_t bn, nextbn;
|
|
! long bsize, bscale, ssize;
|
|
struct partinfo dpart;
|
|
int n, on, majordev, (*ioctl)();
|
|
int error = 0;
|
|
***************
|
|
*** 245,260 ****
|
|
if (uio->uio_offset < 0)
|
|
return (EINVAL);
|
|
bsize = BLKDEV_IOSIZE;
|
|
dev = vp->v_rdev;
|
|
if ((majordev = major(dev)) < nblkdev &&
|
|
(ioctl = bdevsw[majordev].d_ioctl) != NULL &&
|
|
! (*ioctl)(dev, DIOCGPART, (caddr_t)&dpart, FREAD, p) == 0 &&
|
|
! dpart.part->p_fstype == FS_BSDFFS &&
|
|
! dpart.part->p_frag != 0 && dpart.part->p_fsize != 0)
|
|
! bsize = dpart.part->p_frag * dpart.part->p_fsize;
|
|
! bscale = bsize / DEV_BSIZE;
|
|
do {
|
|
! bn = (uio->uio_offset / DEV_BSIZE) &~ (bscale - 1);
|
|
on = uio->uio_offset % bsize;
|
|
n = min((unsigned)(bsize - on), uio->uio_resid);
|
|
if (vp->v_lastr + bscale == bn) {
|
|
--- 245,265 ----
|
|
if (uio->uio_offset < 0)
|
|
return (EINVAL);
|
|
bsize = BLKDEV_IOSIZE;
|
|
+ ssize = DEV_BSIZE;
|
|
dev = vp->v_rdev;
|
|
if ((majordev = major(dev)) < nblkdev &&
|
|
(ioctl = bdevsw[majordev].d_ioctl) != NULL &&
|
|
! (*ioctl)(dev, DIOCGPART, (caddr_t)&dpart, FREAD, p) == 0) {
|
|
! if (dpart.part->p_fstype == FS_BSDFFS &&
|
|
! dpart.part->p_frag != 0 && dpart.part->p_fsize != 0)
|
|
! bsize = dpart.part->p_frag *
|
|
! dpart.part->p_fsize;
|
|
! if (dpart.disklab->d_secsize != 0)
|
|
! ssize = dpart.disklab->d_secsize;
|
|
! }
|
|
! bscale = bsize / ssize;
|
|
do {
|
|
! bn = (uio->uio_offset / ssize) &~ (bscale - 1);
|
|
on = uio->uio_offset % bsize;
|
|
n = min((unsigned)(bsize - on), uio->uio_resid);
|
|
if (vp->v_lastr + bscale == bn) {
|
|
***************
|
|
*** 299,305 ****
|
|
struct proc *p = uio->uio_procp;
|
|
struct buf *bp;
|
|
daddr_t bn;
|
|
! int bsize, blkmask;
|
|
struct partinfo dpart;
|
|
register int n, on;
|
|
int error = 0;
|
|
--- 304,310 ----
|
|
struct proc *p = uio->uio_procp;
|
|
struct buf *bp;
|
|
daddr_t bn;
|
|
! int bsize, blkmask, ssize;
|
|
struct partinfo dpart;
|
|
register int n, on;
|
|
int error = 0;
|
|
***************
|
|
*** 326,341 ****
|
|
if (uio->uio_offset < 0)
|
|
return (EINVAL);
|
|
bsize = BLKDEV_IOSIZE;
|
|
if ((*bdevsw[major(vp->v_rdev)].d_ioctl)(vp->v_rdev, DIOCGPART,
|
|
(caddr_t)&dpart, FREAD, p) == 0) {
|
|
if (dpart.part->p_fstype == FS_BSDFFS &&
|
|
dpart.part->p_frag != 0 && dpart.part->p_fsize != 0)
|
|
bsize = dpart.part->p_frag *
|
|
dpart.part->p_fsize;
|
|
}
|
|
! blkmask = (bsize / DEV_BSIZE) - 1;
|
|
do {
|
|
! bn = (uio->uio_offset / DEV_BSIZE) &~ blkmask;
|
|
on = uio->uio_offset % bsize;
|
|
n = min((unsigned)(bsize - on), uio->uio_resid);
|
|
if (n == bsize)
|
|
--- 331,349 ----
|
|
if (uio->uio_offset < 0)
|
|
return (EINVAL);
|
|
bsize = BLKDEV_IOSIZE;
|
|
+ ssize = DEV_BSIZE;
|
|
if ((*bdevsw[major(vp->v_rdev)].d_ioctl)(vp->v_rdev, DIOCGPART,
|
|
(caddr_t)&dpart, FREAD, p) == 0) {
|
|
if (dpart.part->p_fstype == FS_BSDFFS &&
|
|
dpart.part->p_frag != 0 && dpart.part->p_fsize != 0)
|
|
bsize = dpart.part->p_frag *
|
|
dpart.part->p_fsize;
|
|
+ if (dpart.disklab->d_secsize != 0)
|
|
+ ssize = dpart.disklab->d_secsize;
|
|
}
|
|
! blkmask = (bsize / ssize) - 1;
|
|
do {
|
|
! bn = (uio->uio_offset / ssize) &~ blkmask;
|
|
on = uio->uio_offset % bsize;
|
|
n = min((unsigned)(bsize - on), uio->uio_resid);
|
|
if (n == bsize)
|