Make gjournal work with kernel compiled with "options DIAGNOSTIC".
Previously, it would panic immediately. Reviewed by: pjd Approved by: re (kib)
This commit is contained in:
parent
2dafac3976
commit
fb231f3627
@ -134,6 +134,7 @@ struct g_geom {
|
||||
void *softc;
|
||||
unsigned flags;
|
||||
#define G_GEOM_WITHER 1
|
||||
#define G_GEOM_VOLATILE_BIO 2
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -480,14 +480,6 @@ g_io_deliver(struct bio *bp, int error)
|
||||
KASSERT(bp != NULL, ("NULL bp in g_io_deliver"));
|
||||
pp = bp->bio_to;
|
||||
KASSERT(pp != NULL, ("NULL bio_to in g_io_deliver"));
|
||||
#ifdef DIAGNOSTIC
|
||||
KASSERT(bp->bio_caller1 == bp->_bio_caller1,
|
||||
("bio_caller1 used by the provider %s", pp->name));
|
||||
KASSERT(bp->bio_caller2 == bp->_bio_caller2,
|
||||
("bio_caller2 used by the provider %s", pp->name));
|
||||
KASSERT(bp->bio_cflags == bp->_bio_cflags,
|
||||
("bio_cflags used by the provider %s", pp->name));
|
||||
#endif
|
||||
cp = bp->bio_from;
|
||||
if (cp == NULL) {
|
||||
bp->bio_error = error;
|
||||
@ -496,6 +488,21 @@ g_io_deliver(struct bio *bp, int error)
|
||||
}
|
||||
KASSERT(cp != NULL, ("NULL bio_from in g_io_deliver"));
|
||||
KASSERT(cp->geom != NULL, ("NULL bio_from->geom in g_io_deliver"));
|
||||
#ifdef DIAGNOSTIC
|
||||
/*
|
||||
* Some classes - GJournal in particular - can modify bio's
|
||||
* private fields while the bio is in transit; G_GEOM_VOLATILE_BIO
|
||||
* flag means it's an expected behaviour for that particular geom.
|
||||
*/
|
||||
if ((cp->geom->flags & G_GEOM_VOLATILE_BIO) == 0) {
|
||||
KASSERT(bp->bio_caller1 == bp->_bio_caller1,
|
||||
("bio_caller1 used by the provider %s", pp->name));
|
||||
KASSERT(bp->bio_caller2 == bp->_bio_caller2,
|
||||
("bio_caller2 used by the provider %s", pp->name));
|
||||
KASSERT(bp->bio_cflags == bp->_bio_cflags,
|
||||
("bio_cflags used by the provider %s", pp->name));
|
||||
}
|
||||
#endif
|
||||
KASSERT(bp->bio_completed >= 0, ("bio_completed can't be less than 0"));
|
||||
KASSERT(bp->bio_completed <= bp->bio_length,
|
||||
("bio_completed can't be greater than bio_length"));
|
||||
|
@ -2292,6 +2292,7 @@ g_journal_create(struct g_class *mp, struct g_provider *pp,
|
||||
gp->orphan = g_journal_orphan;
|
||||
gp->access = g_journal_access;
|
||||
gp->softc = sc;
|
||||
gp->flags |= G_GEOM_VOLATILE_BIO;
|
||||
sc->sc_geom = gp;
|
||||
|
||||
mtx_init(&sc->sc_mtx, "gjournal", NULL, MTX_DEF);
|
||||
|
Loading…
x
Reference in New Issue
Block a user