Put a KASSERT in specfs::strategy() to check that the incoming buffer
has a valid b_iocmd. Valid is any one of BIO_{READ,WRITE,DELETE}. I have seen at least one case where the bio_cmd field was zero once the request made it into GEOM. Putting the KASSERT here allows us to spot the culprit in the backtrace.
This commit is contained in:
parent
b7e16f3529
commit
85539f2f6c
@ -532,6 +532,14 @@ spec_strategy(ap)
|
|||||||
struct cdevsw *dsw;
|
struct cdevsw *dsw;
|
||||||
struct thread *td = curthread;
|
struct thread *td = curthread;
|
||||||
|
|
||||||
|
bp = ap->a_bp;
|
||||||
|
vp = ap->a_vp;
|
||||||
|
|
||||||
|
KASSERT(bp->b_iocmd == BIO_READ ||
|
||||||
|
bp->b_iocmd == BIO_WRITE ||
|
||||||
|
bp->b_iocmd == BIO_DELETE,
|
||||||
|
("Wrong b_iocmd buf=%p cmd=%d", bp, bp->b_iocmd));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Slow down disk requests for niced processes.
|
* Slow down disk requests for niced processes.
|
||||||
*/
|
*/
|
||||||
@ -541,8 +549,6 @@ spec_strategy(ap)
|
|||||||
PPAUSE | PCATCH | PDROP, "ioslow",
|
PPAUSE | PCATCH | PDROP, "ioslow",
|
||||||
td->td_ksegrp->kg_nice);
|
td->td_ksegrp->kg_nice);
|
||||||
}
|
}
|
||||||
bp = ap->a_bp;
|
|
||||||
vp = ap->a_vp;
|
|
||||||
if (bp->b_iocmd == BIO_WRITE) {
|
if (bp->b_iocmd == BIO_WRITE) {
|
||||||
if ((bp->b_flags & B_VALIDSUSPWRT) == 0 &&
|
if ((bp->b_flags & B_VALIDSUSPWRT) == 0 &&
|
||||||
bp->b_vp != NULL && bp->b_vp->v_mount != NULL &&
|
bp->b_vp != NULL && bp->b_vp->v_mount != NULL &&
|
||||||
|
Loading…
x
Reference in New Issue
Block a user