diff options
author | rpokala <rpokala@FreeBSD.org> | 2016-01-21 03:05:03 +0000 |
---|---|---|
committer | rpokala <rpokala@FreeBSD.org> | 2016-01-21 03:05:03 +0000 |
commit | ad88a89c7950729640aaf6edf3e70a5aad90663c (patch) | |
tree | 0836be249d6f9042ad7b73329549e7303b1a613a | |
parent | 92f20bcad84fee7542f30f239ef80f9ca93567fd (diff) | |
download | FreeBSD-src-ad88a89c7950729640aaf6edf3e70a5aad90663c.zip FreeBSD-src-ad88a89c7950729640aaf6edf3e70a5aad90663c.tar.gz |
MFC r294042: Add rotationrate to geom disk dumpconf
Parse and report the nominal rotation rate reported by the drive.
Approved by: jhb
-rw-r--r-- | sys/geom/geom_disk.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index 1a879f7..5d7965e 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -581,6 +581,23 @@ g_disk_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp, struct g indent, dp->d_fwheads); sbuf_printf(sb, "%s<fwsectors>%u</fwsectors>\n", indent, dp->d_fwsectors); + + /* + * "rotationrate" is a little complicated, because the value + * returned by the drive might not be the RPM; 0 and 1 are + * special cases, and there's also a valid range. + */ + sbuf_printf(sb, "%s<rotationrate>", indent); + if (dp->d_rotation_rate == 0) /* Old drives don't */ + sbuf_printf(sb, "unknown"); /* report RPM. */ + else if (dp->d_rotation_rate == 1) /* Since 0 is used */ + sbuf_printf(sb, "0"); /* above, SSDs use 1. */ + else if ((dp->d_rotation_rate >= 0x041) && + (dp->d_rotation_rate <= 0xfffe)) + sbuf_printf(sb, "%u", dp->d_rotation_rate); + else + sbuf_printf(sb, "invalid"); + sbuf_printf(sb, "</rotationrate>\n"); if (dp->d_getattr != NULL) { buf = g_malloc(DISK_IDENT_SIZE, M_WAITOK); bp = g_alloc_bio(); |