summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom/geom_dev.c')
-rw-r--r--sys/geom/geom_dev.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c
index 17f24f8..2c113e6 100644
--- a/sys/geom/geom_dev.c
+++ b/sys/geom/geom_dev.c
@@ -222,6 +222,7 @@ g_dev_taste(struct g_class *mp, struct g_provider *pp, int insist __unused)
mtx_init(&sc->sc_mtx, "g_dev", NULL, MTX_DEF);
cp = g_new_consumer(gp);
cp->private = sc;
+ cp->flags |= G_CF_DIRECT_SEND | G_CF_DIRECT_RECEIVE;
error = g_attach(cp, pp);
KASSERT(error == 0,
("g_dev_taste(%s) failed to g_attach, err=%d", pp->name, error));
@@ -485,16 +486,16 @@ g_dev_done(struct bio *bp2)
sc = cp->private;
bp = bp2->bio_parent;
bp->bio_error = bp2->bio_error;
- if (bp->bio_error != 0) {
+ bp->bio_completed = bp2->bio_completed;
+ bp->bio_resid = bp->bio_length - bp2->bio_completed;
+ if (bp2->bio_error != 0) {
g_trace(G_T_BIO, "g_dev_done(%p) had error %d",
- bp2, bp->bio_error);
+ bp2, bp2->bio_error);
bp->bio_flags |= BIO_ERROR;
} else {
g_trace(G_T_BIO, "g_dev_done(%p/%p) resid %ld completed %jd",
- bp2, bp, bp->bio_resid, (intmax_t)bp2->bio_completed);
+ bp2, bp, bp2->bio_resid, (intmax_t)bp2->bio_completed);
}
- bp->bio_resid = bp->bio_length - bp2->bio_completed;
- bp->bio_completed = bp2->bio_completed;
g_destroy_bio(bp2);
destroy = 0;
mtx_lock(&sc->sc_mtx);
OpenPOWER on IntegriCloud