From a1894992f3a34ed9a115828857bb2e6050aaca93 Mon Sep 17 00:00:00 2001 From: grog Date: Sun, 17 Oct 1999 23:55:10 +0000 Subject: launch_requests: Put splbio protection around the main launch loop. We've seen cases where the bottom half was cutting off the branch on which we're sitting. Experienced-by: Michael Reifenberger --- sys/dev/vinum/vinumrequest.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sys/dev/vinum/vinumrequest.c b/sys/dev/vinum/vinumrequest.c index 346527e..d527845 100644 --- a/sys/dev/vinum/vinumrequest.c +++ b/sys/dev/vinum/vinumrequest.c @@ -383,6 +383,7 @@ launch_requests(struct request *rq, int reviveok) } /* Now fire off the requests */ + s = splbio(); /* lock out the interrupt routines */ for (rqg = rq->rqg; rqg != NULL; rqg = rqg->next) { /* through the whole request chain */ for (rqno = 0; rqno < rqg->count; rqno++) { rqe = &rqg->rqe[rqno]; @@ -419,11 +420,9 @@ launch_requests(struct request *rq, int reviveok) logrq(loginfo_rqe, (union rqinfou) rqe, rq->bp); #endif - if ((rqe->b.b_flags & B_READ) == 0) { - s = splbio(); + if ((rqe->b.b_flags & B_READ) == 0) rqe->b.b_vp->v_numoutput++; /* one more output going */ - splx(s); - } + rqe->b.b_flags |= B_ORDERED; /* stick to the request order */ /* fire off the request */ @@ -431,6 +430,7 @@ launch_requests(struct request *rq, int reviveok) } } } + splx(s); return 0; } -- cgit v1.1