diff options
| -rw-r--r-- | sys/geom/geom.h | 1 | ||||
| -rw-r--r-- | sys/geom/geom_io.c | 34 |
2 files changed, 35 insertions, 0 deletions
diff --git a/sys/geom/geom.h b/sys/geom/geom.h index 656f320ccabfa..264c029c8768b 100644 --- a/sys/geom/geom.h +++ b/sys/geom/geom.h @@ -230,6 +230,7 @@ void g_io_request(struct bio *bp, struct g_consumer *cp); struct bio *g_new_bio(void); void * g_read_data(struct g_consumer *cp, off_t offset, off_t length, int *error); int g_write_data(struct g_consumer *cp, off_t offset, void *ptr, off_t length); +void g_print_bio(struct bio *bp); /* geom_kern.c / geom_kernsim.c */ diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c index 28c3b3296e851..507069ba05671 100644 --- a/sys/geom/geom_io.c +++ b/sys/geom/geom_io.c @@ -457,3 +457,37 @@ g_write_data(struct g_consumer *cp, off_t offset, void *ptr, off_t length) g_destroy_bio(bp); return (error); } + +void +g_print_bio(struct bio *bp) +{ + const char *pname, *cmd = NULL; + + if (bp->bio_to != NULL) + pname = bp->bio_to->name; + else + pname = "[unknown]"; + + switch (bp->bio_cmd) { + case BIO_GETATTR: + cmd = "GETATTR"; + printf("%s[%s(attr=%s)]", pname, cmd, bp->bio_attribute); + return; + case BIO_READ: + cmd = "READ"; + case BIO_WRITE: + if (cmd == NULL) + cmd = "WRITE"; + case BIO_DELETE: + if (cmd == NULL) + cmd = "DELETE"; + printf("%s[%s(offset=%jd, length=%jd)]", pname, cmd, + (intmax_t)bp->bio_offset, (intmax_t)bp->bio_length); + return; + default: + cmd = "UNKNOWN"; + printf("%s[%s()]", pname, cmd); + return; + } + /* NOTREACHED */ +} |
