@@ -2711,10 +2711,7 @@ print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
2711
2711
2712
2712
right_justify = B_FALSE ;
2713
2713
if (pl -> pl_prop != ZPROP_INVAL ) {
2714
- if (pl -> pl_prop == ZPOOL_PROP_EXPANDSZ &&
2715
- zpool_get_prop_int (zhp , pl -> pl_prop , NULL ) == 0 )
2716
- propstr = "-" ;
2717
- else if (zpool_get_prop (zhp , pl -> pl_prop , property ,
2714
+ if (zpool_get_prop (zhp , pl -> pl_prop , property ,
2718
2715
sizeof (property ), NULL , cb -> cb_literal ) != 0 )
2719
2716
propstr = "-" ;
2720
2717
else
@@ -2748,21 +2745,37 @@ print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
2748
2745
}
2749
2746
2750
2747
static void
2751
- print_one_column (zpool_prop_t prop , uint64_t value , boolean_t scripted )
2748
+ print_one_column (zpool_prop_t prop , uint64_t value , boolean_t scripted ,
2749
+ boolean_t valid )
2752
2750
{
2753
2751
char propval [64 ];
2754
2752
boolean_t fixed ;
2755
2753
size_t width = zprop_width (prop , & fixed , ZFS_TYPE_POOL );
2756
2754
2757
-
2758
- if (prop == ZPOOL_PROP_EXPANDSZ && value == 0 )
2759
- (void ) strlcpy (propval , "-" , sizeof (propval ));
2760
- else if (prop == ZPOOL_PROP_FRAGMENTATION && value == ZFS_FRAG_INVALID )
2761
- (void ) strlcpy (propval , "-" , sizeof (propval ));
2762
- else if (prop == ZPOOL_PROP_FRAGMENTATION )
2755
+ switch (prop ) {
2756
+ case ZPOOL_PROP_EXPANDSZ :
2757
+ if (value == 0 )
2758
+ (void ) strlcpy (propval , "-" , sizeof (propval ));
2759
+ else
2760
+ zfs_nicenum (value , propval , sizeof (propval ));
2761
+ break ;
2762
+ case ZPOOL_PROP_FRAGMENTATION :
2763
+ if (value == ZFS_FRAG_INVALID ) {
2764
+ (void ) strlcpy (propval , "-" , sizeof (propval ));
2765
+ } else {
2766
+ (void ) snprintf (propval , sizeof (propval ), "%llu%%" ,
2767
+ value );
2768
+ }
2769
+ break ;
2770
+ case ZPOOL_PROP_CAPACITY :
2763
2771
(void ) snprintf (propval , sizeof (propval ), "%llu%%" , value );
2764
- else
2772
+ break ;
2773
+ default :
2765
2774
zfs_nicenum (value , propval , sizeof (propval ));
2775
+ }
2776
+
2777
+ if (!valid )
2778
+ (void ) strlcpy (propval , "-" , sizeof (propval ));
2766
2779
2767
2780
if (scripted )
2768
2781
(void ) printf ("\t%s" , propval );
@@ -2784,6 +2797,9 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
2784
2797
(uint64_t * * )& vs , & c ) == 0 );
2785
2798
2786
2799
if (name != NULL ) {
2800
+ boolean_t toplevel = (vs -> vs_space != 0 );
2801
+ uint64_t cap ;
2802
+
2787
2803
if (scripted )
2788
2804
(void ) printf ("\t%s" , name );
2789
2805
else if (strlen (name ) + depth > cb -> cb_namewidth )
@@ -2792,24 +2808,26 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
2792
2808
(void ) printf ("%*s%s%*s" , depth , "" , name ,
2793
2809
(int )(cb -> cb_namewidth - strlen (name ) - depth ), "" );
2794
2810
2795
- /* only toplevel vdevs have capacity stats */
2796
- if (vs -> vs_space == 0 ) {
2797
- if (scripted )
2798
- (void ) printf ("\t-\t-\t-\t-" );
2799
- else
2800
- (void ) printf (" - - - -" );
2801
- } else {
2802
- print_one_column (ZPOOL_PROP_SIZE , vs -> vs_space ,
2803
- scripted );
2804
- print_one_column (ZPOOL_PROP_CAPACITY , vs -> vs_alloc ,
2805
- scripted );
2806
- print_one_column (ZPOOL_PROP_FREE ,
2807
- vs -> vs_space - vs -> vs_alloc , scripted );
2808
- print_one_column (ZPOOL_PROP_FRAGMENTATION ,
2809
- vs -> vs_fragmentation , scripted );
2810
- }
2811
- print_one_column (ZPOOL_PROP_EXPANDSZ , vs -> vs_esize ,
2812
- scripted );
2811
+ /*
2812
+ * Print the properties for the individual vdevs. Some
2813
+ * properties are only applicable to toplevel vdevs. The
2814
+ * 'toplevel' boolean value is passed to the print_one_column()
2815
+ * to indicate that the value is valid.
2816
+ */
2817
+ print_one_column (ZPOOL_PROP_SIZE , vs -> vs_space , scripted ,
2818
+ toplevel );
2819
+ print_one_column (ZPOOL_PROP_ALLOCATED , vs -> vs_alloc , scripted ,
2820
+ toplevel );
2821
+ print_one_column (ZPOOL_PROP_FREE , vs -> vs_space - vs -> vs_alloc ,
2822
+ scripted , toplevel );
2823
+ print_one_column (ZPOOL_PROP_EXPANDSZ , vs -> vs_esize , scripted ,
2824
+ B_TRUE );
2825
+ print_one_column (ZPOOL_PROP_FRAGMENTATION ,
2826
+ vs -> vs_fragmentation , scripted ,
2827
+ (vs -> vs_fragmentation != ZFS_FRAG_INVALID && toplevel ));
2828
+ cap = (vs -> vs_space == 0 ) ? 0 :
2829
+ (vs -> vs_alloc * 100 / vs -> vs_space );
2830
+ print_one_column (ZPOOL_PROP_CAPACITY , cap , scripted , toplevel );
2813
2831
(void ) printf ("\n" );
2814
2832
}
2815
2833
@@ -2878,7 +2896,8 @@ list_callback(zpool_handle_t *zhp, void *data)
2878
2896
* -H Scripted mode. Don't display headers, and separate properties
2879
2897
* by a single tab.
2880
2898
* -o List of properties to display. Defaults to
2881
- * "name,size,allocated,free,capacity,health,altroot"
2899
+ * "name,size,allocated,free,expandsize,fragmentation,capacity,"
2900
+ * "dedupratio,health,altroot"
2882
2901
* -p Diplay values in parsable (exact) format.
2883
2902
* -T Display a timestamp in date(1) or Unix format
2884
2903
*
@@ -2892,7 +2911,7 @@ zpool_do_list(int argc, char **argv)
2892
2911
int ret ;
2893
2912
list_cbdata_t cb = { 0 };
2894
2913
static char default_props [] =
2895
- "name,size,allocated,free,fragmentation, expandsize,capacity,"
2914
+ "name,size,allocated,free,expandsize,fragmentation ,capacity,"
2896
2915
"dedupratio,health,altroot" ;
2897
2916
char * props = default_props ;
2898
2917
unsigned long interval = 0 , count = 0 ;
0 commit comments