summaryrefslogtreecommitdiffstats
path: root/sys/geom
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2015-11-24 07:16:07 -0200
committerRenato Botelho <renato@netgate.com>2015-11-24 07:16:07 -0200
commit0198089008314a6920ed8427f91c2b734c0d4369 (patch)
tree1af97d1de7dc7828ca8ee6cbf4fcded1d7f2c1f3 /sys/geom
parenta569aca1d382bf02a5a2d9bd8a9b0e0bb6450cca (diff)
parent4b6a65d9c084e4d5381e5bccbe02d1fb30290b90 (diff)
downloadFreeBSD-src-0198089008314a6920ed8427f91c2b734c0d4369.zip
FreeBSD-src-0198089008314a6920ed8427f91c2b734c0d4369.tar.gz
Merge remote-tracking branch 'origin/stable/10' into devel
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/eli/g_eli.c18
-rw-r--r--sys/geom/geom_dev.c14
2 files changed, 16 insertions, 16 deletions
diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c
index 9615621..9a3713a 100644
--- a/sys/geom/eli/g_eli.c
+++ b/sys/geom/eli/g_eli.c
@@ -201,7 +201,7 @@ g_eli_read_done(struct bio *bp)
G_ELI_LOGREQ(2, bp, "Request done.");
pbp = bp->bio_parent;
- if (pbp->bio_error == 0)
+ if (pbp->bio_error == 0 && bp->bio_error != 0)
pbp->bio_error = bp->bio_error;
g_destroy_bio(bp);
/*
@@ -212,7 +212,8 @@ g_eli_read_done(struct bio *bp)
return;
sc = pbp->bio_to->geom->softc;
if (pbp->bio_error != 0) {
- G_ELI_LOGREQ(0, pbp, "%s() failed", __func__);
+ G_ELI_LOGREQ(0, pbp, "%s() failed (error=%d)", __func__,
+ pbp->bio_error);
pbp->bio_completed = 0;
if (pbp->bio_driver2 != NULL) {
free(pbp->bio_driver2, M_ELI);
@@ -241,10 +242,8 @@ g_eli_write_done(struct bio *bp)
G_ELI_LOGREQ(2, bp, "Request done.");
pbp = bp->bio_parent;
- if (pbp->bio_error == 0) {
- if (bp->bio_error != 0)
- pbp->bio_error = bp->bio_error;
- }
+ if (pbp->bio_error == 0 && bp->bio_error != 0)
+ pbp->bio_error = bp->bio_error;
g_destroy_bio(bp);
/*
* Do we have all sectors already?
@@ -255,14 +254,15 @@ g_eli_write_done(struct bio *bp)
free(pbp->bio_driver2, M_ELI);
pbp->bio_driver2 = NULL;
if (pbp->bio_error != 0) {
- G_ELI_LOGREQ(0, pbp, "Crypto WRITE request failed (error=%d).",
+ G_ELI_LOGREQ(0, pbp, "%s() failed (error=%d)", __func__,
pbp->bio_error);
pbp->bio_completed = 0;
- }
+ } else
+ pbp->bio_completed = pbp->bio_length;
+
/*
* Write is finished, send it up.
*/
- pbp->bio_completed = pbp->bio_length;
sc = pbp->bio_to->geom->softc;
g_io_deliver(pbp, pbp->bio_error);
atomic_subtract_int(&sc->sc_inflight, 1);
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c
index 1123323..8ee9ed8 100644
--- a/sys/geom/geom_dev.c
+++ b/sys/geom/geom_dev.c
@@ -127,14 +127,14 @@ g_dev_fini(struct g_class *mp)
}
static int
-g_dev_setdumpdev(struct cdev *dev)
+g_dev_setdumpdev(struct cdev *dev, struct thread *td)
{
struct g_kerneldump kd;
struct g_consumer *cp;
int error, len;
if (dev == NULL)
- return (set_dumper(NULL, NULL));
+ return (set_dumper(NULL, NULL, td));
cp = dev->si_drv2;
len = sizeof(kd);
@@ -142,7 +142,7 @@ g_dev_setdumpdev(struct cdev *dev)
kd.length = OFF_MAX;
error = g_io_getattr("GEOM::kerneldump", cp, &len, &kd);
if (error == 0) {
- error = set_dumper(&kd.di, devtoname(dev));
+ error = set_dumper(&kd.di, devtoname(dev), td);
if (error == 0)
dev->si_flags |= SI_DUMPDEV;
}
@@ -157,7 +157,7 @@ init_dumpdev(struct cdev *dev)
return;
if (strcmp(devtoname(dev), dumpdev) != 0)
return;
- if (g_dev_setdumpdev(dev) == 0) {
+ if (g_dev_setdumpdev(dev, curthread) == 0) {
freeenv(dumpdev);
dumpdev = NULL;
}
@@ -480,9 +480,9 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread
break;
case DIOCSKERNELDUMP:
if (*(u_int *)data == 0)
- error = g_dev_setdumpdev(NULL);
+ error = g_dev_setdumpdev(NULL, td);
else
- error = g_dev_setdumpdev(dev);
+ error = g_dev_setdumpdev(dev, td);
break;
case DIOCGFLUSH:
error = g_io_flush(cp);
@@ -700,7 +700,7 @@ g_dev_orphan(struct g_consumer *cp)
/* Reset any dump-area set on this device */
if (dev->si_flags & SI_DUMPDEV)
- set_dumper(NULL, NULL);
+ (void)set_dumper(NULL, NULL, curthread);
/* Destroy the struct cdev *so we get no more requests */
destroy_dev_sched_cb(dev, g_dev_callback, cp);
OpenPOWER on IntegriCloud