diff options
author | imp <imp@FreeBSD.org> | 2016-03-10 06:25:31 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2016-03-10 06:25:31 +0000 |
commit | cfe83b08022f108bd2b9ae151aee3f21c37c1d09 (patch) | |
tree | 2388214b587ade12d5856c1f80809b17c7b2021e /sys/geom | |
parent | 95982d7b7a4921dd302e9b3f3223c9e2228e1918 (diff) | |
download | FreeBSD-src-cfe83b08022f108bd2b9ae151aee3f21c37c1d09.zip FreeBSD-src-cfe83b08022f108bd2b9ae151aee3f21c37c1d09.tar.gz |
Don't assume that bio_cmd is bit mask.
Differential Revision: https://reviews.freebsd.org/D5593
Diffstat (limited to 'sys/geom')
-rw-r--r-- | sys/geom/geom_disk.c | 10 | ||||
-rw-r--r-- | sys/geom/geom_io.c | 8 |
2 files changed, 14 insertions, 4 deletions
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index afd1fde..d503f67 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -225,8 +225,16 @@ g_disk_done(struct bio *bp) if (bp2->bio_error == 0) bp2->bio_error = bp->bio_error; bp2->bio_completed += bp->bio_completed; - if ((bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_DELETE|BIO_FLUSH)) != 0) + switch (bp->bio_cmd) { + case BIO_READ: + case BIO_WRITE: + case BIO_DELETE: + case BIO_FLUSH: devstat_end_transaction_bio_bt(sc->dp->d_devstat, bp, &now); + break; + default: + break; + } bp2->bio_inbed++; if (bp2->bio_children == bp2->bio_inbed) { mtx_unlock(&sc->done_mtx); diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c index c233c33..61f70c1 100644 --- a/sys/geom/geom_io.c +++ b/sys/geom/geom_io.c @@ -479,6 +479,7 @@ g_io_request(struct bio *bp, struct g_consumer *cp) struct g_provider *pp; struct mtx *mtxp; int direct, error, first; + uint8_t cmd; KASSERT(cp != NULL, ("NULL cp in g_io_request")); KASSERT(bp != NULL, ("NULL bp in g_io_request")); @@ -500,16 +501,17 @@ g_io_request(struct bio *bp, struct g_consumer *cp) bp->_bio_cflags = bp->bio_cflags; #endif - if (bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_GETATTR)) { + cmd = bp->bio_cmd; + if (cmd == BIO_READ || cmd == BIO_WRITE || cmd == BIO_GETATTR) { KASSERT(bp->bio_data != NULL, ("NULL bp->data in g_io_request(cmd=%hhu)", bp->bio_cmd)); } - if (bp->bio_cmd & (BIO_DELETE|BIO_FLUSH)) { + if (cmd == BIO_DELETE || cmd == BIO_FLUSH) { KASSERT(bp->bio_data == NULL, ("non-NULL bp->data in g_io_request(cmd=%hhu)", bp->bio_cmd)); } - if (bp->bio_cmd & (BIO_READ|BIO_WRITE|BIO_DELETE)) { + if (cmd == BIO_READ || cmd == BIO_WRITE || cmd == BIO_DELETE) { KASSERT(bp->bio_offset % cp->provider->sectorsize == 0, ("wrong offset %jd for sectorsize %u", bp->bio_offset, cp->provider->sectorsize)); |