Fix a problem relating to si_iosize_max which broke scsi devices.

This commit is contained in:
Poul-Henning Kamp 1999-10-02 11:17:54 +00:00
parent fff6710f7e
commit 45604de328
2 changed files with 11 additions and 5 deletions

View File

@ -175,6 +175,10 @@ minphys(bp)
u_int maxphys;
maxphys = bp->b_dev->si_iosize_max;
if(!maxphys) {
printf("WARNING: %s maxphys = 0 ??", devtoname(bp->b_dev));
maxphys = DFLTPHYS;
}
if (bp->b_kvasize && (bp->b_kvasize < maxphys))
maxphys = bp->b_kvasize;

View File

@ -115,8 +115,10 @@ diskopen(dev_t dev, int oflags, int devtype, struct proc *p)
if (!dp)
return (ENXIO);
if (!dsisopen(dp->d_slice))
if (!dsisopen(dp->d_slice)) {
pdev->si_iosize_max = dev->si_iosize_max;
error = dp->d_devsw->d_open(pdev, oflags, devtype, p);
}
/* Inherit properties from the whole/raw dev_t */
dev->si_disk = pdev->si_disk;
@ -163,12 +165,12 @@ diskstrategy(struct buf *bp)
dp = bp->b_dev->si_disk;
if (!dp) {
pdev = dkmodpart(dkmodslice(bp->b_dev, WHOLE_DISK_SLICE), RAW_PART);
dp = pdev->si_disk;
dp = bp->b_dev->si_disk = pdev->si_disk;
bp->b_dev->si_drv1 = pdev->si_drv1;
bp->b_dev->si_drv2 = pdev->si_drv2;
/* XXX: don't set bp->b_dev->si_disk (?) */
} else {
pdev = dp->d_dev;
bp->b_dev->si_iosize_max = pdev->si_iosize_max;
bp->b_dev->si_bsize_phys = pdev->si_bsize_phys;
bp->b_dev->si_bsize_best = pdev->si_bsize_best;
}
if (!dp) {