summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChrister Ekholm <[email protected]>2016-05-16 21:29:54 +0200
committerBrian Behlendorf <[email protected]>2016-05-18 10:15:32 -0700
commitbc2d809387debb95d82f47185d446f328da4d147 (patch)
treebe6f6191a86a569e2044c1cf40cef7732324b3e7
parent81b4c075eca2c4c4129933a012cd354f75201f69 (diff)
Make zpool list -vp print individual vdev sizes parsable.
Add argument format to print_one_column(), and use it to call zfs_nicenum_format with, instead of just zfs_nicenum. Don't print "%" for fragmentation or capacity percent values. The calls to print_one_colum is made with ZFS_NICENUM_RAW if cb->cb_literal (zpool list called with -p), and ZFS_NICENUM_1024 if not. Also zpool_get_prop is modified to don't add "%" or "x" if literal. Signed-off-by: Christer Ekholm <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Signed-off-by: Tony Hutter <[email protected] Closes #4657
-rw-r--r--cmd/zpool/zpool_main.c38
-rw-r--r--lib/libzfs/libzfs_pool.c14
2 files changed, 38 insertions, 14 deletions
diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c
index 6412a8e93..414ed69c5 100644
--- a/cmd/zpool/zpool_main.c
+++ b/cmd/zpool/zpool_main.c
@@ -4268,7 +4268,7 @@ print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
static void
print_one_column(zpool_prop_t prop, uint64_t value, boolean_t scripted,
- boolean_t valid)
+ boolean_t valid, enum zfs_nicenum_format format)
{
char propval[64];
boolean_t fixed;
@@ -4279,22 +4279,30 @@ print_one_column(zpool_prop_t prop, uint64_t value, boolean_t scripted,
if (value == 0)
(void) strlcpy(propval, "-", sizeof (propval));
else
- zfs_nicenum(value, propval, sizeof (propval));
+ zfs_nicenum_format(value, propval, sizeof (propval),
+ format);
break;
case ZPOOL_PROP_FRAGMENTATION:
if (value == ZFS_FRAG_INVALID) {
(void) strlcpy(propval, "-", sizeof (propval));
+ } else if (format == ZFS_NICENUM_RAW) {
+ (void) snprintf(propval, sizeof (propval), "%llu",
+ (unsigned long long)value);
} else {
(void) snprintf(propval, sizeof (propval), "%llu%%",
(unsigned long long)value);
}
break;
case ZPOOL_PROP_CAPACITY:
- (void) snprintf(propval, sizeof (propval), "%llu%%",
- (unsigned long long)value);
+ if (format == ZFS_NICENUM_RAW)
+ (void) snprintf(propval, sizeof (propval), "%llu",
+ (unsigned long long)value);
+ else
+ (void) snprintf(propval, sizeof (propval), "%llu%%",
+ (unsigned long long)value);
break;
default:
- zfs_nicenum(value, propval, sizeof (propval));
+ zfs_nicenum_format(value, propval, sizeof (propval), format);
}
if (!valid)
@@ -4325,6 +4333,12 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
if (name != NULL) {
boolean_t toplevel = (vs->vs_space != 0);
uint64_t cap;
+ enum zfs_nicenum_format format;
+
+ if (cb->cb_literal)
+ format = ZFS_NICENUM_RAW;
+ else
+ format = ZFS_NICENUM_1024;
if (scripted)
(void) printf("\t%s", name);
@@ -4341,19 +4355,21 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
* to indicate that the value is valid.
*/
print_one_column(ZPOOL_PROP_SIZE, vs->vs_space, scripted,
- toplevel);
+ toplevel, format);
print_one_column(ZPOOL_PROP_ALLOCATED, vs->vs_alloc, scripted,
- toplevel);
+ toplevel, format);
print_one_column(ZPOOL_PROP_FREE, vs->vs_space - vs->vs_alloc,
- scripted, toplevel);
+ scripted, toplevel, format);
print_one_column(ZPOOL_PROP_EXPANDSZ, vs->vs_esize, scripted,
- B_TRUE);
+ B_TRUE, format);
print_one_column(ZPOOL_PROP_FRAGMENTATION,
vs->vs_fragmentation, scripted,
- (vs->vs_fragmentation != ZFS_FRAG_INVALID && toplevel));
+ (vs->vs_fragmentation != ZFS_FRAG_INVALID && toplevel),
+ format);
cap = (vs->vs_space == 0) ? 0 :
(vs->vs_alloc * 100 / vs->vs_space);
- print_one_column(ZPOOL_PROP_CAPACITY, cap, scripted, toplevel);
+ print_one_column(ZPOOL_PROP_CAPACITY, cap, scripted, toplevel,
+ format);
(void) printf("\n");
}
diff --git a/lib/libzfs/libzfs_pool.c b/lib/libzfs/libzfs_pool.c
index 789df407c..8b74e5da6 100644
--- a/lib/libzfs/libzfs_pool.c
+++ b/lib/libzfs/libzfs_pool.c
@@ -337,6 +337,9 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf,
case ZPOOL_PROP_FRAGMENTATION:
if (intval == UINT64_MAX) {
(void) strlcpy(buf, "-", len);
+ } else if (literal) {
+ (void) snprintf(buf, len, "%llu",
+ (u_longlong_t)intval);
} else {
(void) snprintf(buf, len, "%llu%%",
(u_longlong_t)intval);
@@ -344,9 +347,14 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf,
break;
case ZPOOL_PROP_DEDUPRATIO:
- (void) snprintf(buf, len, "%llu.%02llux",
- (u_longlong_t)(intval / 100),
- (u_longlong_t)(intval % 100));
+ if (literal)
+ (void) snprintf(buf, len, "%llu.%02llu",
+ (u_longlong_t)(intval / 100),
+ (u_longlong_t)(intval % 100));
+ else
+ (void) snprintf(buf, len, "%llu.%02llux",
+ (u_longlong_t)(intval / 100),
+ (u_longlong_t)(intval % 100));
break;
case ZPOOL_PROP_HEALTH: