|
Lines 511-531
Link Here
|
| 511 |
DEBUG("open_disk %p", dev); |
511 |
DEBUG("open_disk %p", dev); |
| 512 |
blks = size / BD(dev).bd_sectorsize; |
512 |
blks = size / BD(dev).bd_sectorsize; |
| 513 |
if (rsize) |
513 |
if (rsize) |
| 514 |
*rsize = 0; |
514 |
*rsize = 0; |
| 515 |
|
515 |
|
| 516 |
if (dblk >= BD(dev).bd_sectors) { |
516 |
#define clip(x) ((x) & 0xffffffff) |
| 517 |
DEBUG("IO past disk end %llu", (unsigned long long)dblk); |
517 |
if (clip(dblk + blks) > clip(BD(dev).bd_sectors)) { |
| 518 |
return (EIO); |
518 |
/* |
| 519 |
} |
519 |
* perform partial read to prevent readahead crossing |
| 520 |
|
520 |
* any 32 bit aliases of the end of disk. |
| 521 |
if (dblk + blks > BD(dev).bd_sectors) { |
521 |
*/ |
| 522 |
/* perform partial read */ |
522 |
blks = clip(BD(dev).bd_sectors) - clip(dblk); |
| 523 |
blks = BD(dev).bd_sectors - dblk; |
|
|
| 524 |
size = blks * BD(dev).bd_sectorsize; |
523 |
size = blks * BD(dev).bd_sectorsize; |
| 525 |
DEBUG("short read %d", blks); |
524 |
DEBUG("short read %d", blks); |
| 526 |
} |
525 |
} |
|
|
526 |
#undef clip |
| 527 |
|
527 |
|
| 528 |
switch(rw){ |
528 |
switch(rw){ |
| 529 |
case F_READ: |
529 |
case F_READ: |
| 530 |
DEBUG("read %d from %lld to %p", blks, dblk, buf); |
530 |
DEBUG("read %d from %lld to %p", blks, dblk, buf); |
| 531 |
|
531 |
|