diff --git a/include/libzutil.h b/include/libzutil.h index e2108ceeaa44..4dd2e47da03d 100644 --- a/include/libzutil.h +++ b/include/libzutil.h @@ -144,13 +144,15 @@ _LIBZUTIL_H boolean_t zfs_isnumber(const char *); * ZFS_NICENUM_TIME: Print nanosecs, microsecs, millisecs, seconds... * ZFS_NICENUM_RAW: Print the raw number without any formatting * ZFS_NICENUM_RAWTIME: Same as RAW, but print dashes ('-') for zero. + * ZFS_NICENUM_BYTES_1000: Same as ZFS_NICENUM_BYTES but use powers of 1000. */ enum zfs_nicenum_format { ZFS_NICENUM_1024 = 0, ZFS_NICENUM_BYTES = 1, ZFS_NICENUM_TIME = 2, ZFS_NICENUM_RAW = 3, - ZFS_NICENUM_RAWTIME = 4 + ZFS_NICENUM_RAWTIME = 4, + ZFS_NICENUM_BYTES_1000 = 5 }; /* diff --git a/lib/libzutil/zutil_nicenum.c b/lib/libzutil/zutil_nicenum.c index e05bcb40a8ce..d186a0d31984 100644 --- a/lib/libzutil/zutil_nicenum.c +++ b/lib/libzutil/zutil_nicenum.c @@ -67,16 +67,19 @@ zfs_nicenum_format(uint64_t num, char *buf, size_t buflen, const char *units[3][7] = { [ZFS_NICENUM_1024] = {"", "K", "M", "G", "T", "P", "E"}, [ZFS_NICENUM_BYTES] = {"B", "K", "M", "G", "T", "P", "E"}, - [ZFS_NICENUM_TIME] = {"ns", "us", "ms", "s", "?", "?", "?"} + [ZFS_NICENUM_TIME] = {"ns", "us", "ms", "s", "?", "?", "?"}, + [ZFS_NICENUM_BYTES_1000] = {"B", "K", "M", "G", "T", "P", "E"} }; const int units_len[] = {[ZFS_NICENUM_1024] = 6, [ZFS_NICENUM_BYTES] = 6, - [ZFS_NICENUM_TIME] = 4}; + [ZFS_NICENUM_TIME] = 4, + [ZFS_NICENUM_BYTES_1000] = 6}; const int k_unit[] = { [ZFS_NICENUM_1024] = 1024, [ZFS_NICENUM_BYTES] = 1024, - [ZFS_NICENUM_TIME] = 1000}; + [ZFS_NICENUM_TIME] = 1000, + [ZFS_NICENUM_BYTES_1000] = 1000}; double val; @@ -180,5 +183,9 @@ zfs_niceraw(uint64_t num, char *buf, size_t buflen) void zfs_nicebytes(uint64_t num, char *buf, size_t buflen) { - zfs_nicenum_format(num, buf, buflen, ZFS_NICENUM_BYTES); + if (libzfs_envvar_is_set("ZFS_KB_IS_1000")) { + zfs_nicenum_format(num, buf, buflen, ZFS_NICENUM_BYTES_1000); + } else { + zfs_nicenum_format(num, buf, buflen, ZFS_NICENUM_BYTES); + } }