summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>1999-08-26 03:26:39 +0000
committergrog <grog@FreeBSD.org>1999-08-26 03:26:39 +0000
commitf94d5d264d6405bbda84b93b6b6e299ee1c133b2 (patch)
treee180c197f7ed8c33b95948d71b491c2acd3415f5 /sys/dev
parent1c73eada882e989c0b06bf85b3ac6d402ab8ca53 (diff)
downloadFreeBSD-src-f94d5d264d6405bbda84b93b6b6e299ee1c133b2.zip
FreeBSD-src-f94d5d264d6405bbda84b93b6b6e299ee1c133b2.tar.gz
complete_rqe: explicitly reinitialize b.b_iodone. This shouldn't have
changed, but we've seen some weird cases of b_iodone being NULL, and they don't make any sense. Suffered-by: Bernd Walter <ticso@cicely.de>
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/vinum/vinuminterrupt.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/dev/vinum/vinuminterrupt.c b/sys/dev/vinum/vinuminterrupt.c
index e497d6c..448dad2 100644
--- a/sys/dev/vinum/vinuminterrupt.c
+++ b/sys/dev/vinum/vinuminterrupt.c
@@ -323,7 +323,8 @@ complete_raid5_write(struct rqelement *rqe)
&&((rqe->flags & XFR_BAD_SUBDISK) == 0)) { /* and we can write this block */
rqe->b.b_flags &= ~(B_READ | B_DONE); /* we're writing now */
rqe->b.b_flags |= B_CALL; /* call us when you're done */
- rqe->flags &= ~XFR_PARITYOP; /* reset flags that brought use here */
+ rqe->b.b_iodone = complete_rqe; /* by calling us here */
+ rqe->flags &= ~XFR_PARITYOP; /* reset flags that brought us here */
rqe->b.b_data = &bp->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 */
@@ -360,8 +361,8 @@ complete_raid5_write(struct rqelement *rqe)
rqe = &rqg->rqe[0];
rqe->b.b_flags &= ~(B_READ | B_DONE); /* we're writing now */
rqe->b.b_flags |= B_CALL; /* call us when you're done */
- rqe->flags &= ~XFR_PARITYOP; /* reset flags that brought use here */
- rqg->flags &= ~XFR_PARITYOP; /* reset flags that brought use here */
+ rqe->b.b_iodone = complete_rqe; /* by calling us here */
+ rqg->flags &= ~XFR_PARITYOP; /* reset flags that brought us here */
rqe->b.b_bcount = rqe->buflen << DEV_BSHIFT; /* length to write */
rqe->b.b_bufsize = rqe->b.b_bcount; /* don't claim we have more */
rqe->b.b_resid = rqe->b.b_bcount; /* nothing transferred */
OpenPOWER on IntegriCloud