PERFORCE change 93424 for review
Kip Macy
kmacy at FreeBSD.org
Fri Mar 17 00:48:33 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=93424
Change 93424 by kmacy at kmacy_storage:sun4v_work on 2006/03/17 00:47:49
fix I/O handling for requests larger than PAGE_SIZE
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/simdisk.c#2 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/simdisk.c#2 (text+ko) ====
@@ -89,18 +89,22 @@
hvd_startio(struct hvd_softc *sc, struct bio *bp)
{
u_int r;
-#if 0
- printf("hvd_startio called \n");
-#endif
- r = 0;
+ int len;
+ r = H_EOK;
+
switch (bp->bio_cmd) {
case BIO_READ:
- r = hv_sim_read(bp->bio_offset, vtophys((void *)bp->bio_data),
- bp->bio_length);
+ for (len = 0; len < bp->bio_length && r == H_EOK; len += PAGE_SIZE) {
+ int rlen = (bp->bio_length - len) > PAGE_SIZE ? PAGE_SIZE : bp->bio_length - len;
+ r = hv_sim_read(bp->bio_offset + len, vtophys((char *)bp->bio_data + len), rlen);
+
+ }
break;
case BIO_WRITE:
- r = hv_sim_read(bp->bio_offset, vtophys((void *)bp->bio_data),
- bp->bio_length);
+ for (len = 0; len < bp->bio_length && r == H_EOK; len += PAGE_SIZE) {
+ int wlen = (bp->bio_length - len) > PAGE_SIZE ? PAGE_SIZE : bp->bio_length - len;
+ r = hv_sim_write(bp->bio_offset + len, vtophys((char *)bp->bio_data + len), wlen);
+ }
break;
}
if (r != H_EOK)
More information about the p4-projects
mailing list