Fix a problem relating to si_iosize_max which broke scsi devices.
This commit is contained in:
parent
fff6710f7e
commit
45604de328
|
@ -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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue