]> granicus.if.org Git - zfs/commitdiff
Make zpool list -vp print individual vdev sizes parsable.
authorChrister Ekholm <che@chrekh.se>
Mon, 16 May 2016 19:29:54 +0000 (21:29 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 18 May 2016 17:15:32 +0000 (10:15 -0700)
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 <che@chrekh.se>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tony Hutter <hutter2@llnl.gov
Closes #4657

cmd/zpool/zpool_main.c
lib/libzfs/libzfs_pool.c

index 6412a8e935b9355d0e978d5c2a2ab45582493a9d..414ed69c57d04169804bd259af4397529ab2ee4a 100644 (file)
@@ -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");
        }
 
index 789df407c47b57c1eea96c8b3d55ae625e358eb1..8b74e5da6678cec5e17f3bb272d34292c4a4fb3d 100644 (file)
@@ -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: