Skip to content

Commit 09f9a82

Browse files
committed
Make zpool status dedup table support raw bytes -p output
Check if -p flag is enabled, and if so print dedup table with raw bytes. Restructure the logic in zutil_pool to check if -p flag is enabled before calling zfs_nicenum() and zfs_nicebytes(). Signed-off-by: Adi Gollamudi <[email protected]> Fixes #11626
1 parent e63d026 commit 09f9a82

File tree

4 files changed

+38
-17
lines changed

4 files changed

+38
-17
lines changed

cmd/zdb/zdb.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2133,7 +2133,7 @@ dump_ddt_object(ddt_t *ddt, ddt_type_t type, ddt_class_t class)
21332133

21342134
(void) printf("%s: object=%llu\n", name,
21352135
(u_longlong_t)ddt->ddt_object[type][class]);
2136-
zpool_dump_ddt(NULL, &ddt->ddt_histogram[type][class]);
2136+
zpool_dump_ddt(NULL, &ddt->ddt_histogram[type][class], B_TRUE);
21372137

21382138
if (dump_opt['D'] < 4)
21392139
return;
@@ -2210,7 +2210,7 @@ dump_all_ddts(spa_t *spa)
22102210
if (dump_opt['D'] > 1) {
22112211
(void) printf("DDT histogram (aggregated over all DDTs):\n");
22122212
ddt_get_dedup_histogram(spa, &ddh_total);
2213-
zpool_dump_ddt(&dds_total, &ddh_total);
2213+
zpool_dump_ddt(&dds_total, &ddh_total, B_TRUE);
22142214
}
22152215

22162216
dump_dedup_ratio(&dds_total);
@@ -7763,7 +7763,7 @@ dump_simulated_ddt(spa_t *spa)
77637763

77647764
(void) printf("Simulated DDT histogram:\n");
77657765

7766-
zpool_dump_ddt(&dds_total, &ddh_total);
7766+
zpool_dump_ddt(&dds_total, &ddh_total, B_TRUE);
77677767

77687768
dump_dedup_ratio(&dds_total);
77697769
}

cmd/zpool/zpool_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10473,7 +10473,7 @@ print_dedup_stats(zpool_handle_t *zhp, nvlist_t *config, boolean_t literal)
1047310473
(uint64_t **)&dds, &c) == 0);
1047410474
verify(nvlist_lookup_uint64_array(config, ZPOOL_CONFIG_DDT_HISTOGRAM,
1047510475
(uint64_t **)&ddh, &c) == 0);
10476-
zpool_dump_ddt(dds, ddh);
10476+
zpool_dump_ddt(dds, ddh, literal);
1047710477
}
1047810478

1047910479
#define ST_SIZE 4096

include/libzutil.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ _LIBZUTIL_H void zfs_niceraw(uint64_t, char *, size_t);
167167
#define nicenum(num, buf, size) zfs_nicenum(num, buf, size)
168168
#define NN_NUMBUF_SZ (6)
169169

170-
_LIBZUTIL_H void zpool_dump_ddt(const ddt_stat_t *, const ddt_histogram_t *);
170+
_LIBZUTIL_H void zpool_dump_ddt(const ddt_stat_t *, const ddt_histogram_t *,
171+
boolean_t parsable);
171172
_LIBZUTIL_H int zpool_history_unpack(char *, uint64_t, uint64_t *, nvlist_t ***,
172173
uint_t *);
173174
_LIBZUTIL_H void fsleep(float sec);

lib/libzutil/zutil_pool.c

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,27 @@
3333

3434
#include <libzutil.h>
3535

36+
37+
static inline void
38+
fmt_num(boolean_t parsable, uint64_t val, char *buf, size_t buflen)
39+
{
40+
if (parsable)
41+
(void) snprintf(buf, buflen, "%llu", (u_longlong_t)val);
42+
else
43+
zfs_nicenum(val, buf, buflen);
44+
}
45+
46+
static inline void
47+
fmt_bytes(boolean_t parsable, uint64_t val, char *buf, size_t buflen)
48+
{
49+
if (parsable)
50+
(void) snprintf(buf, buflen, "%llu", (u_longlong_t)val);
51+
else
52+
zfs_nicebytes(val, buf, buflen);
53+
}
54+
3655
static void
37-
dump_ddt_stat(const ddt_stat_t *dds, int h)
56+
dump_ddt_stat(const ddt_stat_t *dds, int h, boolean_t parsable)
3857
{
3958
char refcnt[6];
4059
char blocks[6], lsize[6], psize[6], dsize[6];
@@ -48,14 +67,14 @@ dump_ddt_stat(const ddt_stat_t *dds, int h)
4867
else
4968
zfs_nicenum(1ULL << h, refcnt, sizeof (refcnt));
5069

51-
zfs_nicenum(dds->dds_blocks, blocks, sizeof (blocks));
52-
zfs_nicebytes(dds->dds_lsize, lsize, sizeof (lsize));
53-
zfs_nicebytes(dds->dds_psize, psize, sizeof (psize));
54-
zfs_nicebytes(dds->dds_dsize, dsize, sizeof (dsize));
55-
zfs_nicenum(dds->dds_ref_blocks, ref_blocks, sizeof (ref_blocks));
56-
zfs_nicebytes(dds->dds_ref_lsize, ref_lsize, sizeof (ref_lsize));
57-
zfs_nicebytes(dds->dds_ref_psize, ref_psize, sizeof (ref_psize));
58-
zfs_nicebytes(dds->dds_ref_dsize, ref_dsize, sizeof (ref_dsize));
70+
fmt_num(parsable, dds->dds_blocks, blocks, sizeof (blocks));
71+
fmt_bytes(parsable, dds->dds_lsize, lsize, sizeof (lsize));
72+
fmt_bytes(parsable, dds->dds_psize, psize, sizeof (psize));
73+
fmt_bytes(parsable, dds->dds_dsize, dsize, sizeof (dsize));
74+
fmt_num(parsable, dds->dds_ref_blocks, ref_blocks, sizeof (ref_blocks));
75+
fmt_bytes(parsable, dds->dds_ref_lsize, ref_lsize, sizeof (ref_lsize));
76+
fmt_bytes(parsable, dds->dds_ref_psize, ref_psize, sizeof (ref_psize));
77+
fmt_bytes(parsable, dds->dds_ref_dsize, ref_dsize, sizeof (ref_dsize));
5978

6079
(void) printf("%6s %6s %5s %5s %5s %6s %5s %5s %5s\n",
6180
refcnt,
@@ -67,7 +86,8 @@ dump_ddt_stat(const ddt_stat_t *dds, int h)
6786
* Print the DDT histogram and the column totals.
6887
*/
6988
void
70-
zpool_dump_ddt(const ddt_stat_t *dds_total, const ddt_histogram_t *ddh)
89+
zpool_dump_ddt(const ddt_stat_t *dds_total, const ddt_histogram_t *ddh,
90+
boolean_t parsable)
7191
{
7292
int h;
7393

@@ -91,9 +111,9 @@ zpool_dump_ddt(const ddt_stat_t *dds_total, const ddt_histogram_t *ddh)
91111
"------", "-----", "-----", "-----");
92112

93113
for (h = 0; h < 64; h++)
94-
dump_ddt_stat(&ddh->ddh_stat[h], h);
114+
dump_ddt_stat(&ddh->ddh_stat[h], h, parsable);
95115

96-
dump_ddt_stat(dds_total, -1);
116+
dump_ddt_stat(dds_total, -1, parsable);
97117

98118
(void) printf("\n");
99119
}

0 commit comments

Comments
 (0)