blkzone: add capacity field to zone report

NVMe ZNS specification defines zone capacity. The report zone interface
of Linux kernel supports it. Expose it in report zone by blkzone command.

Signed-off-by: Hans Holmberg <hans.holmberg@wdc.com>
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
This commit is contained in:
Shin'ichiro Kawasaki 2020-07-01 20:33:26 +09:00 committed by Karel Zak
parent d0aa83147a
commit e5ad3a6ad0
3 changed files with 23 additions and 2 deletions

View File

@ -344,6 +344,10 @@ AC_CHECK_HEADERS([security/pam_misc.h],
AC_CHECK_HEADERS([linux/blkzoned.h])
AC_CHECK_DECLS([BLK_ZONE_REP_CAPACITY], [], [], [
#include <linux/blkzoned.h>
])
AC_CHECK_HEADERS([security/openpam.h], [], [], [
#ifdef HAVE_SECURITY_PAM_APPL_H
#include <security/pam_appl.h>

View File

@ -29,6 +29,7 @@ tab(:);
l l.
start:Zone start sector
len:Zone length in number of sectors
cap:Zone capacity in number of sectors
wptr:Zone write pointer position
reset:Reset write pointer recommended
non-seq:Non-sequential write resources active

View File

@ -24,6 +24,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <fcntl.h>
#include <limits.h>
#include <getopt.h>
@ -189,6 +190,14 @@ done:
return rc == 0 ? sz : 0;
}
#if HAVE_DECL_BLK_ZONE_REP_CAPACITY
#define has_zone_capacity(zi) ((zi)->flags & BLK_ZONE_REP_CAPACITY)
#define zone_capacity(z) (z)->capacity
#else
#define has_zone_capacity(zi) (false)
#define zone_capacity(z) (z)->len
#endif
/*
* blkzone report
*/
@ -269,15 +278,22 @@ static int blkzone_report(struct blkzone_control *ctl)
uint64_t wp = entry->wp;
uint8_t cond = entry->cond;
uint64_t len = entry->len;
uint64_t cap;
if (!len) {
nr_zones = 0;
break;
}
printf(_(" start: 0x%09"PRIx64", len 0x%06"PRIx64", wptr 0x%06"PRIx64
if (has_zone_capacity(zi))
cap = zone_capacity(entry);
else
cap = entry->len;
printf(_(" start: 0x%09"PRIx64", len 0x%06"PRIx64
", cap 0x%06"PRIx64", wptr 0x%06"PRIx64
" reset:%u non-seq:%u, zcond:%2u(%s) [type: %u(%s)]\n"),
start, len, (type == 0x1) ? 0 : wp - start,
start, len, cap, (type == 0x1) ? 0 : wp - start,
entry->reset, entry->non_seq,
cond, condition_str[cond & (ARRAY_SIZE(condition_str) - 1)],
type, type_text[type]);