From 76ffeff6bd3e0d1632dc0d4c4508d22021e7c22c Mon Sep 17 00:00:00 2001 From: Greg Lehey Date: Mon, 24 Nov 2003 04:06:56 +0000 Subject: [PATCH] Initalize buffer headers correctly for current version of bio subsystem. Not mentioned by: phk Approved by: re (scottl) This makes Vinum work again, at least in my testing. --- sys/dev/vinum/vinuminterrupt.c | 4 +++- sys/dev/vinum/vinumio.c | 1 + sys/dev/vinum/vinumrequest.c | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/sys/dev/vinum/vinuminterrupt.c b/sys/dev/vinum/vinuminterrupt.c index a09d003d77d8..7344280ae9a5 100644 --- a/sys/dev/vinum/vinuminterrupt.c +++ b/sys/dev/vinum/vinuminterrupt.c @@ -396,9 +396,10 @@ complete_raid5_write(struct rqelement *rqe) rqe->b.b_data = &ubp->b_data[rqe->useroffset << DEV_BSHIFT]; /* point to the user data */ rqe->b.b_bcount = rqe->datalen << DEV_BSHIFT; /* length to write */ rqe->b.b_bufsize = rqe->b.b_bcount; /* don't claim more */ - rqe->b.b_offset = rqe->b.b_blkno << DEV_BSHIFT; rqe->b.b_resid = rqe->b.b_bcount; /* nothing transferred */ rqe->b.b_blkno += rqe->dataoffset; /* point to the correct block */ + rqe->b.b_offset = rqe->b.b_blkno << DEV_BSHIFT; + rqe->b.b_iooffset = rqe->b.b_offset; rqg->active++; /* another active request */ drive = &DRIVE[rqe->driveno]; /* drive to access */ @@ -436,6 +437,7 @@ complete_raid5_write(struct rqelement *rqe) rqg->flags &= ~XFR_PARITYOP; /* reset flags that brought us here */ rqe->b.b_bcount = rqe->buflen << DEV_BSHIFT; /* length to write */ rqe->b.b_offset = rqe->b.b_blkno << DEV_BSHIFT; + rqe->b.b_iooffset = rqe->b.b_offset; rqe->b.b_bufsize = rqe->b.b_bcount; /* don't claim we have more */ rqe->b.b_resid = rqe->b.b_bcount; /* nothing transferred */ rqg->active++; /* another active request */ diff --git a/sys/dev/vinum/vinumio.c b/sys/dev/vinum/vinumio.c index 42785dabfc92..ed9dbfb4acd3 100644 --- a/sys/dev/vinum/vinumio.c +++ b/sys/dev/vinum/vinumio.c @@ -256,6 +256,7 @@ driveio(struct drive *drive, char *buf, size_t length, off_t offset, int flag) bp->b_dev = drive->dev; /* device */ bp->b_blkno = offset / drive->sectorsize; /* block number */ bp->b_offset = offset; + bp->b_iooffset = offset; bp->b_saveaddr = bp->b_data; bp->b_data = buf; bp->b_bcount = len; diff --git a/sys/dev/vinum/vinumrequest.c b/sys/dev/vinum/vinumrequest.c index 9a0320693a5f..007411aa0459 100644 --- a/sys/dev/vinum/vinumrequest.c +++ b/sys/dev/vinum/vinumrequest.c @@ -448,6 +448,7 @@ launch_requests(struct request *rq, int reviveok) #endif /* fire off the request */ rqe->b.b_offset = rqe->b.b_blkno << DEV_BSHIFT; + rqe->b.b_iooffset = rqe->b.b_offset; DEV_STRATEGY(&rqe->b); } } @@ -993,6 +994,7 @@ sdio(struct buf *bp) logrq(loginfo_sdiol, (union rqinfou) &sbp->b, &sbp->b); #endif sbp->b.b_offset = sbp->b.b_blkno << DEV_BSHIFT; + sbp->b.b_iooffset = sbp->b.b_offset; DEV_STRATEGY(&sbp->b); splx(s); }