diff options
author | Christer Ekholm <[email protected]> | 2016-05-16 21:29:54 +0200 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-05-18 10:15:32 -0700 |
commit | bc2d809387debb95d82f47185d446f328da4d147 (patch) | |
tree | be6f6191a86a569e2044c1cf40cef7732324b3e7 | |
parent | 81b4c075eca2c4c4129933a012cd354f75201f69 (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.c | 38 | ||||
-rw-r--r-- | lib/libzfs/libzfs_pool.c | 14 |
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: |