diff options
author | grog <grog@FreeBSD.org> | 1999-08-26 03:26:39 +0000 |
---|---|---|
committer | grog <grog@FreeBSD.org> | 1999-08-26 03:26:39 +0000 |
commit | f94d5d264d6405bbda84b93b6b6e299ee1c133b2 (patch) | |
tree | e180c197f7ed8c33b95948d71b491c2acd3415f5 /sys/dev | |
parent | 1c73eada882e989c0b06bf85b3ac6d402ab8ca53 (diff) | |
download | FreeBSD-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.c | 7 |
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 */ |