@@ -2955,10 +2955,7 @@ print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
2955
2955
2956
2956
right_justify = B_FALSE ;
2957
2957
if (pl -> pl_prop != ZPROP_INVAL ) {
2958
- if (pl -> pl_prop == ZPOOL_PROP_EXPANDSZ &&
2959
- zpool_get_prop_int (zhp , pl -> pl_prop , NULL ) == 0 )
2960
- propstr = "-" ;
2961
- else if (zpool_get_prop (zhp , pl -> pl_prop , property ,
2958
+ if (zpool_get_prop (zhp , pl -> pl_prop , property ,
2962
2959
sizeof (property ), NULL ) != 0 )
2963
2960
propstr = "-" ;
2964
2961
else
@@ -2992,22 +2989,38 @@ print_pool(zpool_handle_t *zhp, list_cbdata_t *cb)
2992
2989
}
2993
2990
2994
2991
static void
2995
- print_one_column (zpool_prop_t prop , uint64_t value , boolean_t scripted )
2992
+ print_one_column (zpool_prop_t prop , uint64_t value , boolean_t scripted ,
2993
+ boolean_t valid )
2996
2994
{
2997
2995
char propval [64 ];
2998
2996
boolean_t fixed ;
2999
2997
size_t width = zprop_width (prop , & fixed , ZFS_TYPE_POOL );
3000
2998
3001
-
3002
- if (prop == ZPOOL_PROP_EXPANDSZ && value == 0 )
3003
- (void ) strlcpy (propval , "-" , sizeof (propval ));
3004
- else if (prop == ZPOOL_PROP_FRAGMENTATION && value == ZFS_FRAG_INVALID )
3005
- (void ) strlcpy (propval , "-" , sizeof (propval ));
3006
- else if (prop == ZPOOL_PROP_FRAGMENTATION )
2999
+ switch (prop ) {
3000
+ case ZPOOL_PROP_EXPANDSZ :
3001
+ if (value == 0 )
3002
+ (void ) strlcpy (propval , "-" , sizeof (propval ));
3003
+ else
3004
+ zfs_nicenum (value , propval , sizeof (propval ));
3005
+ break ;
3006
+ case ZPOOL_PROP_FRAGMENTATION :
3007
+ if (value == ZFS_FRAG_INVALID ) {
3008
+ (void ) strlcpy (propval , "-" , sizeof (propval ));
3009
+ } else {
3010
+ (void ) snprintf (propval , sizeof (propval ), "%llu%%" ,
3011
+ (unsigned long long )value );
3012
+ }
3013
+ break ;
3014
+ case ZPOOL_PROP_CAPACITY :
3007
3015
(void ) snprintf (propval , sizeof (propval ), "%llu%%" ,
3008
3016
(unsigned long long )value );
3009
- else
3017
+ break ;
3018
+ default :
3010
3019
zfs_nicenum (value , propval , sizeof (propval ));
3020
+ }
3021
+
3022
+ if (!valid )
3023
+ (void ) strlcpy (propval , "-" , sizeof (propval ));
3011
3024
3012
3025
if (scripted )
3013
3026
(void ) printf ("\t%s" , propval );
@@ -3029,6 +3042,9 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
3029
3042
(uint64_t * * )& vs , & c ) == 0 );
3030
3043
3031
3044
if (name != NULL ) {
3045
+ boolean_t toplevel = (vs -> vs_space != 0 );
3046
+ uint64_t cap ;
3047
+
3032
3048
if (scripted )
3033
3049
(void ) printf ("\t%s" , name );
3034
3050
else if (strlen (name ) + depth > cb -> cb_namewidth )
@@ -3037,24 +3053,26 @@ print_list_stats(zpool_handle_t *zhp, const char *name, nvlist_t *nv,
3037
3053
(void ) printf ("%*s%s%*s" , depth , "" , name ,
3038
3054
(int )(cb -> cb_namewidth - strlen (name ) - depth ), "" );
3039
3055
3040
- /* only toplevel vdevs have capacity stats */
3041
- if (vs -> vs_space == 0 ) {
3042
- if (scripted )
3043
- (void ) printf ("\t-\t-\t-\t-" );
3044
- else
3045
- (void ) printf (" - - - -" );
3046
- } else {
3047
- print_one_column (ZPOOL_PROP_SIZE , vs -> vs_space ,
3048
- scripted );
3049
- print_one_column (ZPOOL_PROP_CAPACITY , vs -> vs_alloc ,
3050
- scripted );
3051
- print_one_column (ZPOOL_PROP_FREE ,
3052
- vs -> vs_space - vs -> vs_alloc , scripted );
3053
- print_one_column (ZPOOL_PROP_FRAGMENTATION ,
3054
- vs -> vs_fragmentation , scripted );
3055
- }
3056
- print_one_column (ZPOOL_PROP_EXPANDSZ , vs -> vs_esize ,
3057
- scripted );
3056
+ /*
3057
+ * Print the properties for the individual vdevs. Some
3058
+ * properties are only applicable to toplevel vdevs. The
3059
+ * 'toplevel' boolean value is passed to the print_one_column()
3060
+ * to indicate that the value is valid.
3061
+ */
3062
+ print_one_column (ZPOOL_PROP_SIZE , vs -> vs_space , scripted ,
3063
+ toplevel );
3064
+ print_one_column (ZPOOL_PROP_ALLOCATED , vs -> vs_alloc , scripted ,
3065
+ toplevel );
3066
+ print_one_column (ZPOOL_PROP_FREE , vs -> vs_space - vs -> vs_alloc ,
3067
+ scripted , toplevel );
3068
+ print_one_column (ZPOOL_PROP_EXPANDSZ , vs -> vs_esize , scripted ,
3069
+ B_TRUE );
3070
+ print_one_column (ZPOOL_PROP_FRAGMENTATION ,
3071
+ vs -> vs_fragmentation , scripted ,
3072
+ (vs -> vs_fragmentation != ZFS_FRAG_INVALID && toplevel ));
3073
+ cap = (vs -> vs_space == 0 ) ? 0 :
3074
+ (vs -> vs_alloc * 100 / vs -> vs_space );
3075
+ print_one_column (ZPOOL_PROP_CAPACITY , cap , scripted , toplevel );
3058
3076
(void ) printf ("\n" );
3059
3077
}
3060
3078
@@ -3123,7 +3141,8 @@ list_callback(zpool_handle_t *zhp, void *data)
3123
3141
* -H Scripted mode. Don't display headers, and separate properties
3124
3142
* by a single tab.
3125
3143
* -o List of properties to display. Defaults to
3126
- * "name,size,allocated,free,capacity,health,altroot"
3144
+ * "name,size,allocated,free,expandsize,fragmentation,capacity,"
3145
+ * "dedupratio,health,altroot"
3127
3146
* -T Display a timestamp in date(1) or Unix format
3128
3147
*
3129
3148
* List all pools in the system, whether or not they're healthy. Output space
@@ -3136,7 +3155,7 @@ zpool_do_list(int argc, char **argv)
3136
3155
int ret = 0 ;
3137
3156
list_cbdata_t cb = { 0 };
3138
3157
static char default_props [] =
3139
- "name,size,allocated,free,fragmentation,capacity,"
3158
+ "name,size,allocated,free,expandsize, fragmentation,capacity,"
3140
3159
"dedupratio,health,altroot" ;
3141
3160
char * props = default_props ;
3142
3161
unsigned long interval = 0 , count = 0 ;
0 commit comments