Avoid a possible stall.

This commit is contained in:
ad 2000-11-26 16:16:04 +00:00
parent 63d8906bac
commit ee170a5528
1 changed files with 10 additions and 6 deletions

View File

@ -69,7 +69,7 @@ static void lsugetdisklabel(struct lsu_softc *);
static int lsulock(struct lsu_softc *);
static void lsuminphys(struct buf *bp);
static void lsushutdown(void *);
static void lsustart(struct lsu_softc *, struct buf *);
static int lsustart(struct lsu_softc *, struct buf *);
static void lsuunlock(struct lsu_softc *);
extern struct cfdriver lsu_cd;
@ -295,7 +295,7 @@ lsustrategy(struct buf *bp)
lsustart(sc, bp);
}
static void
static int
lsustart(struct lsu_softc *sc, struct buf *bp)
{
struct disklabel *lp;
@ -311,6 +311,7 @@ lsustart(struct lsu_softc *sc, struct buf *bp)
if ((bp->b_bcount % lp->d_secsize) != 0 || bp->b_blkno < 0) {
bp->b_flags |= B_ERROR;
biodone(bp);
return (-1);
}
/*
@ -319,7 +320,7 @@ lsustart(struct lsu_softc *sc, struct buf *bp)
if (bp->b_bcount == 0) {
bp->b_resid = bp->b_bcount;
biodone(bp);
return;
return (-1);
}
/*
@ -331,7 +332,7 @@ lsustart(struct lsu_softc *sc, struct buf *bp)
(sc->sc_flags & (LSUF_WLABEL | LSUF_LABELLING)) != 0) <= 0) {
bp->b_resid = bp->b_bcount;
biodone(bp);
return;
return (-1);
}
/*
@ -359,6 +360,8 @@ lsustart(struct lsu_softc *sc, struct buf *bp)
lsudone(sc, bp);
splx(s);
}
return (0);
}
void
@ -377,9 +380,10 @@ lsudone(struct lsu_softc *sc, struct buf *bp)
biodone(bp);
sc->sc_queuecnt--;
if ((bp = BUFQ_FIRST(&sc->sc_bufq)) != NULL) {
while ((bp = BUFQ_FIRST(&sc->sc_bufq)) != NULL) {
BUFQ_REMOVE(&sc->sc_bufq, bp);
lsustart(sc, bp);
if (!lsustart(sc, bp))
break;
}
}