util-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] add columns for zoned parameters
@ 2021-08-27  7:34 Naohiro Aota
  2021-08-27  7:34 ` [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes Naohiro Aota
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Naohiro Aota @ 2021-08-27  7:34 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Damien.LeMoal, Naohiro Aota

Several parameters for zoned devices are missing from lsblk's columns. This
series introduces them as following.

 Column Name   Description             Sysfs path
 ------------------------------------------------------------------
 ZONE-SZ       zone size               queue/chunk_sectors
 ZONE-GRAN     zone write granularity  queue/zone_write_granularity
 ZONE-APP      zone append max bytes   queue/zone_append_max_bytes
 ZONE-NR       number of zones         queue/nr_zones
 ZONE-OMAX     max open zones          queue/max_open_zones
 ZONE-AMAX     max active zones        queue/max_active_zones

These columns are also added to the "-z" output.

Sample output:

$ lsblk -z -i
NAME        ZONED        ZONE-SZ ZONE-NR ZONE-AMAX ZONE-OMAX ZONE-APP ZONE-GRAN
sda         host-managed    256M   55880         0       128     672K        4K
sdb         host-managed    256M   55880         0       128     672K        4K
zram0       none              0B       0         0         0       0B        0B
nvme2n1     none              0B       0         0         0       0B        0B
|-nvme2n1p1 none              0B       0         0         0       0B        0B
|-nvme2n1p2 none              0B       0         0         0       0B        0B
`-nvme2n1p3 none              0B       0         0         0       0B        0B
nvme0n1     none              0B       0         0         0       0B        0B
nvme1n1     none              0B       0         0         0       0B        0B
nvme0n2     host-managed      2G    1844        14        14       4M        4K
nvme1n2     host-managed      2G    1844        14        14       4M        4K

$ lsblk --help|grep -i zone
 -z, --zoned          print zone model
        ZONED  zone model
      ZONE-SZ  zone size
    ZONE-GRAN  zone write granularity
     ZONE-APP  zone append max bytes
      ZONE-NR  number of zones
    ZONE-OMAX  max open zones
    ZONE-AMAX  max active zones

Naohiro Aota (3):
  lsblk: factor out function to read sysfs param as bytes
  lsblk: add columns of zoned parameters
  lsblk: add zoned columns to "lsblk -z"

 bash-completion/lsblk   |   3 +-
 misc-utils/lsblk.8.adoc |   2 +-
 misc-utils/lsblk.c      | 103 ++++++++++++++++++++++++++++++----------
 3 files changed, 81 insertions(+), 27 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes
  2021-08-27  7:34 [PATCH v2 0/3] add columns for zoned parameters Naohiro Aota
@ 2021-08-27  7:34 ` Naohiro Aota
  2021-08-29 23:07   ` Damien Le Moal
  2021-08-27  7:34 ` [PATCH v2 2/3] lsblk: add columns of zoned parameters Naohiro Aota
  2021-08-27  7:34 ` [PATCH v2 3/3] lsblk: add zoned columns to "lsblk -z" Naohiro Aota
  2 siblings, 1 reply; 12+ messages in thread
From: Naohiro Aota @ 2021-08-27  7:34 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Damien.LeMoal, Naohiro Aota

Factor out a new function device_read_bytes() to read a sysfs path as bytes
for a preparation for the next commit and to reduce the code duplication.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 misc-utils/lsblk.c | 45 ++++++++++++++++++++-------------------------
 1 file changed, 20 insertions(+), 25 deletions(-)

diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
index 100eba0779f8..775a6d832076 100644
--- a/misc-utils/lsblk.c
+++ b/misc-utils/lsblk.c
@@ -708,6 +708,24 @@ static uint64_t device_get_discard_granularity(struct lsblk_device *dev)
 	return dev->discard_granularity;
 }
 
+static void device_read_bytes(struct lsblk_device *dev, char *path, char **str,
+			      uint64_t *sortdata)
+{
+	if (lsblk->bytes) {
+		ul_path_read_string(dev->sysfs, str, path);
+		if (sortdata)
+			str2u64(*str, sortdata);
+	} else {
+		uint64_t x;
+
+		if (ul_path_read_u64(dev->sysfs, &x, path) == 0) {
+			*str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
+			if (sortdata)
+				*sortdata = x;
+		}
+	}
+}
+
 /*
  * Generates data (string) for column specified by column ID for specified device. If sortdata
  * is not NULL then returns number usable to sort the column if the data are available for the
@@ -1033,18 +1051,7 @@ static char *device_get_data(
 		}
 		break;
 	case COL_DMAX:
-		if (lsblk->bytes) {
-			ul_path_read_string(dev->sysfs, &str, "queue/discard_max_bytes");
-			if (sortdata)
-				str2u64(str, sortdata);
-		} else {
-			uint64_t x;
-			if (ul_path_read_u64(dev->sysfs, &x, "queue/discard_max_bytes") == 0) {
-				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
-				if (sortdata)
-					*sortdata = x;
-			}
-		}
+		device_read_bytes(dev, "queue/discard_max_bytes", &str, sortdata);
 		break;
 	case COL_DZERO:
 		if (device_get_discard_granularity(dev) > 0)
@@ -1053,19 +1060,7 @@ static char *device_get_data(
 			str = xstrdup("0");
 		break;
 	case COL_WSAME:
-		if (lsblk->bytes) {
-			ul_path_read_string(dev->sysfs, &str, "queue/write_same_max_bytes");
-			if (sortdata)
-				str2u64(str, sortdata);
-		} else {
-			uint64_t x;
-
-			if (ul_path_read_u64(dev->sysfs, &x, "queue/write_same_max_bytes") == 0) {
-				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
-				if (sortdata)
-					*sortdata = x;
-			}
-		}
+		device_read_bytes(dev, "queue/write_same_max_bytes", &str, sortdata);
 		if (!str)
 			str = xstrdup("0");
 		break;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 2/3] lsblk: add columns of zoned parameters
  2021-08-27  7:34 [PATCH v2 0/3] add columns for zoned parameters Naohiro Aota
  2021-08-27  7:34 ` [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes Naohiro Aota
@ 2021-08-27  7:34 ` Naohiro Aota
  2021-08-29 23:10   ` Damien Le Moal
  2021-08-29 23:15   ` Damien Le Moal
  2021-08-27  7:34 ` [PATCH v2 3/3] lsblk: add zoned columns to "lsblk -z" Naohiro Aota
  2 siblings, 2 replies; 12+ messages in thread
From: Naohiro Aota @ 2021-08-27  7:34 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Damien.LeMoal, Naohiro Aota

Several parameters for zoned devices are missing from lsblk's columns. This
commit introduces them as following.

 ZONE-SZ    zone size
 ZONE-GRAN  zone write granularity
 ZONE-APP   zone append max bytes
 ZONE-NR    number of zones
 ZONE-OMAX  max open zones
 ZONE-AMAX  max active zones

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 bash-completion/lsblk |  3 ++-
 misc-utils/lsblk.c    | 52 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/bash-completion/lsblk b/bash-completion/lsblk
index 731ef3f4095d..c9ebbdcedef6 100644
--- a/bash-completion/lsblk
+++ b/bash-completion/lsblk
@@ -10,7 +10,8 @@ _lsblk_module()
 		LABEL UUID PTUUID PTTYPE PARTTYPE PARTTYPENAME PARTLABEL PARTUUID PARTFLAGS RA
 		RO RM HOTPLUG MODEL SERIAL SIZE STATE OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO
 		PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
-		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED DAX
+		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED ZONE-SZ ZONE-GRAN
+		ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX DAX
 	"
 
 	case $prev in
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
index 775a6d832076..108c8187498e 100644
--- a/misc-utils/lsblk.c
+++ b/misc-utils/lsblk.c
@@ -123,6 +123,12 @@ enum {
 	COL_WSAME,
 	COL_WWN,
 	COL_ZONED,
+	COL_ZONESIZE,
+	COL_ZONEWRITEGRAN,
+	COL_ZONEAPPEND,
+	COL_ZONE_NR,
+	COL_ZONE_OMAX,
+	COL_ZONE_AMAX,
 };
 
 /* basic table settings */
@@ -213,6 +219,12 @@ static struct colinfo infos[] = {
 	[COL_WSAME] = { "WSAME", 6, SCOLS_FL_RIGHT, N_("write same max bytes"), COLTYPE_SIZE },
 	[COL_WWN] = { "WWN", 18, 0, N_("unique storage identifier") },
 	[COL_ZONED] = { "ZONED", 0.3, 0, N_("zone model") },
+	[COL_ZONESIZE] = { "ZONE-SZ", 9, SCOLS_FL_RIGHT, N_("zone size"), COLTYPE_NUM },
+	[COL_ZONEWRITEGRAN] = { "ZONE-GRAN", 10, SCOLS_FL_RIGHT, N_("zone write granularity"), COLTYPE_NUM },
+	[COL_ZONEAPPEND] = { "ZONE-APP", 11, SCOLS_FL_RIGHT, N_("zone append max bytes"), COLTYPE_NUM },
+	[COL_ZONE_NR] = { "ZONE-NR", 8, SCOLS_FL_RIGHT, N_("number of zones"), COLTYPE_NUM },
+	[COL_ZONE_OMAX] = { "ZONE-OMAX", 10, SCOLS_FL_RIGHT, N_("max open zones"), COLTYPE_NUM },
+	[COL_ZONE_AMAX] = { "ZONE-AMAX", 10, SCOLS_FL_RIGHT, N_("max active zones"), COLTYPE_NUM },
 };
 
 struct lsblk *lsblk;	/* global handler */
@@ -1067,6 +1079,46 @@ static char *device_get_data(
 	case COL_ZONED:
 		ul_path_read_string(dev->sysfs, &str, "queue/zoned");
 		break;
+	case COL_ZONESIZE:
+	{
+		uint64_t x;
+
+		if (ul_path_read_u64(dev->sysfs, &x, "queue/chunk_sectors") == 0) {
+			x <<= 9;
+			if (lsblk->bytes)
+				xasprintf(&str, "%ju", x);
+			else
+				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
+			if (sortdata)
+				*sortdata = x;
+		}
+		break;
+	}
+	case COL_ZONEWRITEGRAN:
+		device_read_bytes(dev, "queue/zone_write_granularity", &str, sortdata);
+		break;
+	case COL_ZONEAPPEND:
+		device_read_bytes(dev, "queue/zone_append_max_bytes", &str, sortdata);
+		break;
+	case COL_ZONE_NR:
+		ul_path_read_string(dev->sysfs, &str, "queue/nr_zones");
+		if (sortdata)
+			str2u64(str, sortdata);
+		break;
+	case COL_ZONE_OMAX:
+		ul_path_read_string(dev->sysfs, &str, "queue/max_open_zones");
+		if (!str)
+			str = xstrdup("0");
+		if (sortdata)
+			str2u64(str, sortdata);
+		break;
+	case COL_ZONE_AMAX:
+		ul_path_read_string(dev->sysfs, &str, "queue/max_active_zones");
+		if (!str)
+			str = xstrdup("0");
+		if (sortdata)
+			str2u64(str, sortdata);
+		break;
 	case COL_DAX:
 		ul_path_read_string(dev->sysfs, &str, "queue/dax");
 		break;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 3/3] lsblk: add zoned columns to "lsblk -z"
  2021-08-27  7:34 [PATCH v2 0/3] add columns for zoned parameters Naohiro Aota
  2021-08-27  7:34 ` [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes Naohiro Aota
  2021-08-27  7:34 ` [PATCH v2 2/3] lsblk: add columns of zoned parameters Naohiro Aota
@ 2021-08-27  7:34 ` Naohiro Aota
  2021-08-29 23:14   ` Damien Le Moal
  2 siblings, 1 reply; 12+ messages in thread
From: Naohiro Aota @ 2021-08-27  7:34 UTC (permalink / raw)
  To: Karel Zak; +Cc: util-linux, Damien.LeMoal, Naohiro Aota

Add zoned columns to the "-z" option as follow.

$ lsblk -z -i
NAME        ZONED        ZONE-SZ ZONE-NR ZONE-AMAX ZONE-OMAX ZONE-APP ZONE-GRAN
sda         host-managed    256M   55880         0       128     672K        4K
sdb         host-managed    256M   55880         0       128     672K        4K
zram0       none              0B       0         0         0       0B        0B
nvme2n1     none              0B       0         0         0       0B        0B
|-nvme2n1p1 none              0B       0         0         0       0B        0B
|-nvme2n1p2 none              0B       0         0         0       0B        0B
`-nvme2n1p3 none              0B       0         0         0       0B        0B
nvme0n1     none              0B       0         0         0       0B        0B
nvme1n1     none              0B       0         0         0       0B        0B
nvme0n2     host-managed      2G    1844        14        14       4M        4K
nvme1n2     host-managed      2G    1844        14        14       4M        4K

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
---
 misc-utils/lsblk.8.adoc | 2 +-
 misc-utils/lsblk.c      | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/misc-utils/lsblk.8.adoc b/misc-utils/lsblk.8.adoc
index 7356976403a7..9e68a847ce0c 100644
--- a/misc-utils/lsblk.8.adoc
+++ b/misc-utils/lsblk.8.adoc
@@ -116,7 +116,7 @@ Specifies output width as a number of characters. The default is the number of t
 Sort output lines by _column_. This option enables *--list* output format by default. It is possible to use the option *--tree* to force tree-like output and than the tree branches are sorted by the _column_.
 
 *-z*, *--zoned*::
-Print the zone model for each device.
+Print the zone related information for each device.
 
 *--sysroot* _directory_::
 Gather data for a Linux instance other than the instance from which the *lsblk* command is issued. The specified directory is the system root of the Linux instance to be inspected. The real device nodes in the target directory can be replaced by text files with udev attributes.
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
index 108c8187498e..8a2578312f0d 100644
--- a/misc-utils/lsblk.c
+++ b/misc-utils/lsblk.c
@@ -1919,7 +1919,7 @@ static void __attribute__((__noreturn__)) usage(void)
 	fputs(_(" -t, --topology       output info about topology\n"), out);
 	fputs(_(" -w, --width <num>    specifies output width as number of characters\n"), out);
 	fputs(_(" -x, --sort <column>  sort output by <column>\n"), out);
-	fputs(_(" -z, --zoned          print zone model\n"), out);
+	fputs(_(" -z, --zoned          print zone related information\n"), out);
 	fputs(_("     --sysroot <dir>  use specified directory as system root\n"), out);
 	fputs(USAGE_SEPARATOR, out);
 	printf(USAGE_HELP_OPTIONS(22));
@@ -2041,6 +2041,12 @@ int main(int argc, char *argv[])
 		case 'z':
 			add_uniq_column(COL_NAME);
 			add_uniq_column(COL_ZONED);
+			add_uniq_column(COL_ZONESIZE);
+			add_uniq_column(COL_ZONE_NR);
+			add_uniq_column(COL_ZONE_AMAX);
+			add_uniq_column(COL_ZONE_OMAX);
+			add_uniq_column(COL_ZONEAPPEND);
+			add_uniq_column(COL_ZONEWRITEGRAN);
 			break;
 		case 'e':
 			parse_excludes(optarg);
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes
  2021-08-27  7:34 ` [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes Naohiro Aota
@ 2021-08-29 23:07   ` Damien Le Moal
  2021-08-30  1:21     ` Naohiro Aota
  0 siblings, 1 reply; 12+ messages in thread
From: Damien Le Moal @ 2021-08-29 23:07 UTC (permalink / raw)
  To: Naohiro Aota, Karel Zak; +Cc: util-linux

On 2021/08/27 16:35, Naohiro Aota wrote:
> Factor out a new function device_read_bytes() to read a sysfs path as bytes
> for a preparation for the next commit and to reduce the code duplication.
> 
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  misc-utils/lsblk.c | 45 ++++++++++++++++++++-------------------------
>  1 file changed, 20 insertions(+), 25 deletions(-)
> 
> diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> index 100eba0779f8..775a6d832076 100644
> --- a/misc-utils/lsblk.c
> +++ b/misc-utils/lsblk.c
> @@ -708,6 +708,24 @@ static uint64_t device_get_discard_granularity(struct lsblk_device *dev)
>  	return dev->discard_granularity;
>  }
>  
> +static void device_read_bytes(struct lsblk_device *dev, char *path, char **str,
> +			      uint64_t *sortdata)
> +{
> +	if (lsblk->bytes) {
> +		ul_path_read_string(dev->sysfs, str, path);
> +		if (sortdata)
> +			str2u64(*str, sortdata);

You could return early here to avoid the else...

> +	} else {
> +		uint64_t x;
> +
> +		if (ul_path_read_u64(dev->sysfs, &x, path) == 0) {
> +			*str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> +			if (sortdata)
> +				*sortdata = x;
> +		}
> +	}
> +}
> +
>  /*
>   * Generates data (string) for column specified by column ID for specified device. If sortdata
>   * is not NULL then returns number usable to sort the column if the data are available for the
> @@ -1033,18 +1051,7 @@ static char *device_get_data(
>  		}
>  		break;
>  	case COL_DMAX:
> -		if (lsblk->bytes) {
> -			ul_path_read_string(dev->sysfs, &str, "queue/discard_max_bytes");
> -			if (sortdata)
> -				str2u64(str, sortdata);
> -		} else {
> -			uint64_t x;
> -			if (ul_path_read_u64(dev->sysfs, &x, "queue/discard_max_bytes") == 0) {
> -				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> -				if (sortdata)
> -					*sortdata = x;
> -			}
> -		}
> +		device_read_bytes(dev, "queue/discard_max_bytes", &str, sortdata);
>  		break;
>  	case COL_DZERO:
>  		if (device_get_discard_granularity(dev) > 0)
> @@ -1053,19 +1060,7 @@ static char *device_get_data(
>  			str = xstrdup("0");
>  		break;
>  	case COL_WSAME:
> -		if (lsblk->bytes) {
> -			ul_path_read_string(dev->sysfs, &str, "queue/write_same_max_bytes");
> -			if (sortdata)
> -				str2u64(str, sortdata);
> -		} else {
> -			uint64_t x;
> -
> -			if (ul_path_read_u64(dev->sysfs, &x, "queue/write_same_max_bytes") == 0) {
> -				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> -				if (sortdata)
> -					*sortdata = x;
> -			}
> -		}
> +		device_read_bytes(dev, "queue/write_same_max_bytes", &str, sortdata);
>  		if (!str)
>  			str = xstrdup("0");
>  		break;
> 

Apart from the optional nit above, looks good to me.

Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>


-- 
Damien Le Moal
Western Digital Research

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] lsblk: add columns of zoned parameters
  2021-08-27  7:34 ` [PATCH v2 2/3] lsblk: add columns of zoned parameters Naohiro Aota
@ 2021-08-29 23:10   ` Damien Le Moal
  2021-08-30  1:08     ` Naohiro Aota
  2021-08-29 23:15   ` Damien Le Moal
  1 sibling, 1 reply; 12+ messages in thread
From: Damien Le Moal @ 2021-08-29 23:10 UTC (permalink / raw)
  To: Naohiro Aota, Karel Zak; +Cc: util-linux

On 2021/08/27 16:35, Naohiro Aota wrote:
> Several parameters for zoned devices are missing from lsblk's columns. This
> commit introduces them as following.
> 
>  ZONE-SZ    zone size
>  ZONE-GRAN  zone write granularity

ZONE-WGRAN ? (to enforce the point that is a WRITE granularity).

>  ZONE-APP   zone append max bytes
>  ZONE-NR    number of zones
>  ZONE-OMAX  max open zones
>  ZONE-AMAX  max active zones
> 
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  bash-completion/lsblk |  3 ++-
>  misc-utils/lsblk.c    | 52 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 54 insertions(+), 1 deletion(-)
> 
> diff --git a/bash-completion/lsblk b/bash-completion/lsblk
> index 731ef3f4095d..c9ebbdcedef6 100644
> --- a/bash-completion/lsblk
> +++ b/bash-completion/lsblk
> @@ -10,7 +10,8 @@ _lsblk_module()
>  		LABEL UUID PTUUID PTTYPE PARTTYPE PARTTYPENAME PARTLABEL PARTUUID PARTFLAGS RA
>  		RO RM HOTPLUG MODEL SERIAL SIZE STATE OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO
>  		PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
> -		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED DAX
> +		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED ZONE-SZ ZONE-GRAN
> +		ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX DAX
>  	"
>  
>  	case $prev in
> diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> index 775a6d832076..108c8187498e 100644
> --- a/misc-utils/lsblk.c
> +++ b/misc-utils/lsblk.c
> @@ -123,6 +123,12 @@ enum {
>  	COL_WSAME,
>  	COL_WWN,
>  	COL_ZONED,
> +	COL_ZONESIZE,
> +	COL_ZONEWRITEGRAN,
> +	COL_ZONEAPPEND,

COL_ZONESZ
COL_ZONEWGRAN
COL_ZONEAPP

To be inline with the columns display names ?

> +	COL_ZONE_NR,
> +	COL_ZONE_OMAX,
> +	COL_ZONE_AMAX,
>  };
>  
>  /* basic table settings */
> @@ -213,6 +219,12 @@ static struct colinfo infos[] = {
>  	[COL_WSAME] = { "WSAME", 6, SCOLS_FL_RIGHT, N_("write same max bytes"), COLTYPE_SIZE },
>  	[COL_WWN] = { "WWN", 18, 0, N_("unique storage identifier") },
>  	[COL_ZONED] = { "ZONED", 0.3, 0, N_("zone model") },
> +	[COL_ZONESIZE] = { "ZONE-SZ", 9, SCOLS_FL_RIGHT, N_("zone size"), COLTYPE_NUM },
> +	[COL_ZONEWRITEGRAN] = { "ZONE-GRAN", 10, SCOLS_FL_RIGHT, N_("zone write granularity"), COLTYPE_NUM },
> +	[COL_ZONEAPPEND] = { "ZONE-APP", 11, SCOLS_FL_RIGHT, N_("zone append max bytes"), COLTYPE_NUM },
> +	[COL_ZONE_NR] = { "ZONE-NR", 8, SCOLS_FL_RIGHT, N_("number of zones"), COLTYPE_NUM },
> +	[COL_ZONE_OMAX] = { "ZONE-OMAX", 10, SCOLS_FL_RIGHT, N_("max open zones"), COLTYPE_NUM },
> +	[COL_ZONE_AMAX] = { "ZONE-AMAX", 10, SCOLS_FL_RIGHT, N_("max active zones"), COLTYPE_NUM },
>  };
>  
>  struct lsblk *lsblk;	/* global handler */
> @@ -1067,6 +1079,46 @@ static char *device_get_data(
>  	case COL_ZONED:
>  		ul_path_read_string(dev->sysfs, &str, "queue/zoned");
>  		break;
> +	case COL_ZONESIZE:
> +	{
> +		uint64_t x;
> +
> +		if (ul_path_read_u64(dev->sysfs, &x, "queue/chunk_sectors") == 0) {
> +			x <<= 9;
> +			if (lsblk->bytes)
> +				xasprintf(&str, "%ju", x);
> +			else
> +				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> +			if (sortdata)
> +				*sortdata = x;
> +		}
> +		break;
> +	}
> +	case COL_ZONEWRITEGRAN:
> +		device_read_bytes(dev, "queue/zone_write_granularity", &str, sortdata);
> +		break;
> +	case COL_ZONEAPPEND:
> +		device_read_bytes(dev, "queue/zone_append_max_bytes", &str, sortdata);
> +		break;
> +	case COL_ZONE_NR:
> +		ul_path_read_string(dev->sysfs, &str, "queue/nr_zones");
> +		if (sortdata)
> +			str2u64(str, sortdata);
> +		break;
> +	case COL_ZONE_OMAX:
> +		ul_path_read_string(dev->sysfs, &str, "queue/max_open_zones");
> +		if (!str)
> +			str = xstrdup("0");
> +		if (sortdata)
> +			str2u64(str, sortdata);
> +		break;
> +	case COL_ZONE_AMAX:
> +		ul_path_read_string(dev->sysfs, &str, "queue/max_active_zones");
> +		if (!str)
> +			str = xstrdup("0");
> +		if (sortdata)
> +			str2u64(str, sortdata);
> +		break;
>  	case COL_DAX:
>  		ul_path_read_string(dev->sysfs, &str, "queue/dax");
>  		break;
> 


-- 
Damien Le Moal
Western Digital Research

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 3/3] lsblk: add zoned columns to "lsblk -z"
  2021-08-27  7:34 ` [PATCH v2 3/3] lsblk: add zoned columns to "lsblk -z" Naohiro Aota
@ 2021-08-29 23:14   ` Damien Le Moal
  0 siblings, 0 replies; 12+ messages in thread
From: Damien Le Moal @ 2021-08-29 23:14 UTC (permalink / raw)
  To: Naohiro Aota, Karel Zak; +Cc: util-linux

On 2021/08/27 16:35, Naohiro Aota wrote:
> Add zoned columns to the "-z" option as follow.
> 
> $ lsblk -z -i
> NAME        ZONED        ZONE-SZ ZONE-NR ZONE-AMAX ZONE-OMAX ZONE-APP ZONE-GRAN
> sda         host-managed    256M   55880         0       128     672K        4K
> sdb         host-managed    256M   55880         0       128     672K        4K
> zram0       none              0B       0         0         0       0B        0B
> nvme2n1     none              0B       0         0         0       0B        0B
> |-nvme2n1p1 none              0B       0         0         0       0B        0B
> |-nvme2n1p2 none              0B       0         0         0       0B        0B
> `-nvme2n1p3 none              0B       0         0         0       0B        0B
> nvme0n1     none              0B       0         0         0       0B        0B
> nvme1n1     none              0B       0         0         0       0B        0B
> nvme0n2     host-managed      2G    1844        14        14       4M        4K
> nvme1n2     host-managed      2G    1844        14        14       4M        4K>
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  misc-utils/lsblk.8.adoc | 2 +-
>  misc-utils/lsblk.c      | 8 +++++++-
>  2 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/misc-utils/lsblk.8.adoc b/misc-utils/lsblk.8.adoc
> index 7356976403a7..9e68a847ce0c 100644
> --- a/misc-utils/lsblk.8.adoc
> +++ b/misc-utils/lsblk.8.adoc
> @@ -116,7 +116,7 @@ Specifies output width as a number of characters. The default is the number of t
>  Sort output lines by _column_. This option enables *--list* output format by default. It is possible to use the option *--tree* to force tree-like output and than the tree branches are sorted by the _column_.
>  
>  *-z*, *--zoned*::
> -Print the zone model for each device.
> +Print the zone related information for each device.
>  
>  *--sysroot* _directory_::
>  Gather data for a Linux instance other than the instance from which the *lsblk* command is issued. The specified directory is the system root of the Linux instance to be inspected. The real device nodes in the target directory can be replaced by text files with udev attributes.
> diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> index 108c8187498e..8a2578312f0d 100644
> --- a/misc-utils/lsblk.c
> +++ b/misc-utils/lsblk.c
> @@ -1919,7 +1919,7 @@ static void __attribute__((__noreturn__)) usage(void)
>  	fputs(_(" -t, --topology       output info about topology\n"), out);
>  	fputs(_(" -w, --width <num>    specifies output width as number of characters\n"), out);
>  	fputs(_(" -x, --sort <column>  sort output by <column>\n"), out);
> -	fputs(_(" -z, --zoned          print zone model\n"), out);
> +	fputs(_(" -z, --zoned          print zone related information\n"), out);
>  	fputs(_("     --sysroot <dir>  use specified directory as system root\n"), out);
>  	fputs(USAGE_SEPARATOR, out);
>  	printf(USAGE_HELP_OPTIONS(22));
> @@ -2041,6 +2041,12 @@ int main(int argc, char *argv[])
>  		case 'z':
>  			add_uniq_column(COL_NAME);
>  			add_uniq_column(COL_ZONED);
> +			add_uniq_column(COL_ZONESIZE);
> +			add_uniq_column(COL_ZONE_NR);
> +			add_uniq_column(COL_ZONE_AMAX);
> +			add_uniq_column(COL_ZONE_OMAX);
> +			add_uniq_column(COL_ZONEAPPEND);
> +			add_uniq_column(COL_ZONEWRITEGRAN);
>  			break;
>  		case 'e':
>  			parse_excludes(optarg);
> 

Looks good, modulo the change to ZONE-WGRAN.

Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>


-- 
Damien Le Moal
Western Digital Research

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] lsblk: add columns of zoned parameters
  2021-08-27  7:34 ` [PATCH v2 2/3] lsblk: add columns of zoned parameters Naohiro Aota
  2021-08-29 23:10   ` Damien Le Moal
@ 2021-08-29 23:15   ` Damien Le Moal
  1 sibling, 0 replies; 12+ messages in thread
From: Damien Le Moal @ 2021-08-29 23:15 UTC (permalink / raw)
  To: Naohiro Aota, Karel Zak; +Cc: util-linux

On 2021/08/27 16:35, Naohiro Aota wrote:
> Several parameters for zoned devices are missing from lsblk's columns. This
> commit introduces them as following.
> 
>  ZONE-SZ    zone size
>  ZONE-GRAN  zone write granularity
>  ZONE-APP   zone append max bytes
>  ZONE-NR    number of zones
>  ZONE-OMAX  max open zones
>  ZONE-AMAX  max active zones
> 
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
>  bash-completion/lsblk |  3 ++-
>  misc-utils/lsblk.c    | 52 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 54 insertions(+), 1 deletion(-)
> 
> diff --git a/bash-completion/lsblk b/bash-completion/lsblk
> index 731ef3f4095d..c9ebbdcedef6 100644
> --- a/bash-completion/lsblk
> +++ b/bash-completion/lsblk
> @@ -10,7 +10,8 @@ _lsblk_module()
>  		LABEL UUID PTUUID PTTYPE PARTTYPE PARTTYPENAME PARTLABEL PARTUUID PARTFLAGS RA
>  		RO RM HOTPLUG MODEL SERIAL SIZE STATE OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO
>  		PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
> -		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED DAX
> +		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED ZONE-SZ ZONE-GRAN
> +		ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX DAX
>  	"
>  
>  	case $prev in
> diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> index 775a6d832076..108c8187498e 100644
> --- a/misc-utils/lsblk.c
> +++ b/misc-utils/lsblk.c
> @@ -123,6 +123,12 @@ enum {
>  	COL_WSAME,
>  	COL_WWN,
>  	COL_ZONED,
> +	COL_ZONESIZE,
> +	COL_ZONEWRITEGRAN,
> +	COL_ZONEAPPEND,
> +	COL_ZONE_NR,
> +	COL_ZONE_OMAX,
> +	COL_ZONE_AMAX,
>  };
>  
>  /* basic table settings */
> @@ -213,6 +219,12 @@ static struct colinfo infos[] = {
>  	[COL_WSAME] = { "WSAME", 6, SCOLS_FL_RIGHT, N_("write same max bytes"), COLTYPE_SIZE },
>  	[COL_WWN] = { "WWN", 18, 0, N_("unique storage identifier") },
>  	[COL_ZONED] = { "ZONED", 0.3, 0, N_("zone model") },
> +	[COL_ZONESIZE] = { "ZONE-SZ", 9, SCOLS_FL_RIGHT, N_("zone size"), COLTYPE_NUM },
> +	[COL_ZONEWRITEGRAN] = { "ZONE-GRAN", 10, SCOLS_FL_RIGHT, N_("zone write granularity"), COLTYPE_NUM },
> +	[COL_ZONEAPPEND] = { "ZONE-APP", 11, SCOLS_FL_RIGHT, N_("zone append max bytes"), COLTYPE_NUM },
> +	[COL_ZONE_NR] = { "ZONE-NR", 8, SCOLS_FL_RIGHT, N_("number of zones"), COLTYPE_NUM },
> +	[COL_ZONE_OMAX] = { "ZONE-OMAX", 10, SCOLS_FL_RIGHT, N_("max open zones"), COLTYPE_NUM },

"maximum number of open zones" for the description please. "max" is not a word
and adding "number of" clarifies the unit of the value.

> +	[COL_ZONE_AMAX] = { "ZONE-AMAX", 10, SCOLS_FL_RIGHT, N_("max active zones"), COLTYPE_NUM },

Same here: "maximum number of active zones".

>  };
>  
>  struct lsblk *lsblk;	/* global handler */
> @@ -1067,6 +1079,46 @@ static char *device_get_data(
>  	case COL_ZONED:
>  		ul_path_read_string(dev->sysfs, &str, "queue/zoned");
>  		break;
> +	case COL_ZONESIZE:
> +	{
> +		uint64_t x;
> +
> +		if (ul_path_read_u64(dev->sysfs, &x, "queue/chunk_sectors") == 0) {
> +			x <<= 9;
> +			if (lsblk->bytes)
> +				xasprintf(&str, "%ju", x);
> +			else
> +				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> +			if (sortdata)
> +				*sortdata = x;
> +		}
> +		break;
> +	}
> +	case COL_ZONEWRITEGRAN:
> +		device_read_bytes(dev, "queue/zone_write_granularity", &str, sortdata);
> +		break;
> +	case COL_ZONEAPPEND:
> +		device_read_bytes(dev, "queue/zone_append_max_bytes", &str, sortdata);
> +		break;
> +	case COL_ZONE_NR:
> +		ul_path_read_string(dev->sysfs, &str, "queue/nr_zones");
> +		if (sortdata)
> +			str2u64(str, sortdata);
> +		break;
> +	case COL_ZONE_OMAX:
> +		ul_path_read_string(dev->sysfs, &str, "queue/max_open_zones");
> +		if (!str)
> +			str = xstrdup("0");
> +		if (sortdata)
> +			str2u64(str, sortdata);
> +		break;
> +	case COL_ZONE_AMAX:
> +		ul_path_read_string(dev->sysfs, &str, "queue/max_active_zones");
> +		if (!str)
> +			str = xstrdup("0");
> +		if (sortdata)
> +			str2u64(str, sortdata);
> +		break;
>  	case COL_DAX:
>  		ul_path_read_string(dev->sysfs, &str, "queue/dax");
>  		break;
> 


-- 
Damien Le Moal
Western Digital Research

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] lsblk: add columns of zoned parameters
  2021-08-29 23:10   ` Damien Le Moal
@ 2021-08-30  1:08     ` Naohiro Aota
  2021-08-30  1:50       ` Damien Le Moal
  0 siblings, 1 reply; 12+ messages in thread
From: Naohiro Aota @ 2021-08-30  1:08 UTC (permalink / raw)
  To: Damien Le Moal; +Cc: Karel Zak, util-linux

On Sun, Aug 29, 2021 at 11:10:18PM +0000, Damien Le Moal wrote:
> On 2021/08/27 16:35, Naohiro Aota wrote:
> > Several parameters for zoned devices are missing from lsblk's columns. This
> > commit introduces them as following.
> > 
> >  ZONE-SZ    zone size
> >  ZONE-GRAN  zone write granularity
> 
> ZONE-WGRAN ? (to enforce the point that is a WRITE granularity).

I changed WGRAN to GRAN to follow DISC-GRAN (discard granularity) and
to have a shorter name. But, either is fine for me.

> 
> >  ZONE-APP   zone append max bytes
> >  ZONE-NR    number of zones
> >  ZONE-OMAX  max open zones
> >  ZONE-AMAX  max active zones
> > 
> > Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> > ---
> >  bash-completion/lsblk |  3 ++-
> >  misc-utils/lsblk.c    | 52 +++++++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 54 insertions(+), 1 deletion(-)
> > 
> > diff --git a/bash-completion/lsblk b/bash-completion/lsblk
> > index 731ef3f4095d..c9ebbdcedef6 100644
> > --- a/bash-completion/lsblk
> > +++ b/bash-completion/lsblk
> > @@ -10,7 +10,8 @@ _lsblk_module()
> >  		LABEL UUID PTUUID PTTYPE PARTTYPE PARTTYPENAME PARTLABEL PARTUUID PARTFLAGS RA
> >  		RO RM HOTPLUG MODEL SERIAL SIZE STATE OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO
> >  		PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
> > -		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED DAX
> > +		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED ZONE-SZ ZONE-GRAN
> > +		ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX DAX
> >  	"
> >  
> >  	case $prev in
> > diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> > index 775a6d832076..108c8187498e 100644
> > --- a/misc-utils/lsblk.c
> > +++ b/misc-utils/lsblk.c
> > @@ -123,6 +123,12 @@ enum {
> >  	COL_WSAME,
> >  	COL_WWN,
> >  	COL_ZONED,
> > +	COL_ZONESIZE,
> > +	COL_ZONEWRITEGRAN,
> > +	COL_ZONEAPPEND,
> 
> COL_ZONESZ
> COL_ZONEWGRAN
> COL_ZONEAPP
> 
> To be inline with the columns display names ?

Sure. I'll fix.

> > +	COL_ZONE_NR,
> > +	COL_ZONE_OMAX,
> > +	COL_ZONE_AMAX,
> >  };
> >  /* basic table settings */
> > @@ -213,6 +219,12 @@ static struct colinfo infos[] = {
> >  	[COL_WSAME] = { "WSAME", 6, SCOLS_FL_RIGHT, N_("write same max bytes"), COLTYPE_SIZE },
> >  	[COL_WWN] = { "WWN", 18, 0, N_("unique storage identifier") },
> >  	[COL_ZONED] = { "ZONED", 0.3, 0, N_("zone model") },
> > +	[COL_ZONESIZE] = { "ZONE-SZ", 9, SCOLS_FL_RIGHT, N_("zone size"), COLTYPE_NUM },
> > +	[COL_ZONEWRITEGRAN] = { "ZONE-GRAN", 10, SCOLS_FL_RIGHT, N_("zone write granularity"), COLTYPE_NUM },
> > +	[COL_ZONEAPPEND] = { "ZONE-APP", 11, SCOLS_FL_RIGHT, N_("zone append max bytes"), COLTYPE_NUM },
> > +	[COL_ZONE_NR] = { "ZONE-NR", 8, SCOLS_FL_RIGHT, N_("number of zones"), COLTYPE_NUM },
> > +	[COL_ZONE_OMAX] = { "ZONE-OMAX", 10, SCOLS_FL_RIGHT, N_("max open zones"), COLTYPE_NUM },
> > +	[COL_ZONE_AMAX] = { "ZONE-AMAX", 10, SCOLS_FL_RIGHT, N_("max active zones"), COLTYPE_NUM },
> >  };
> >  
> >  struct lsblk *lsblk;	/* global handler */
> > @@ -1067,6 +1079,46 @@ static char *device_get_data(
> >  	case COL_ZONED:
> >  		ul_path_read_string(dev->sysfs, &str, "queue/zoned");
> >  		break;
> > +	case COL_ZONESIZE:
> > +	{
> > +		uint64_t x;
> > +
> > +		if (ul_path_read_u64(dev->sysfs, &x, "queue/chunk_sectors") == 0) {
> > +			x <<= 9;
> > +			if (lsblk->bytes)
> > +				xasprintf(&str, "%ju", x);
> > +			else
> > +				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> > +			if (sortdata)
> > +				*sortdata = x;
> > +		}
> > +		break;
> > +	}
> > +	case COL_ZONEWRITEGRAN:
> > +		device_read_bytes(dev, "queue/zone_write_granularity", &str, sortdata);
> > +		break;
> > +	case COL_ZONEAPPEND:
> > +		device_read_bytes(dev, "queue/zone_append_max_bytes", &str, sortdata);
> > +		break;
> > +	case COL_ZONE_NR:
> > +		ul_path_read_string(dev->sysfs, &str, "queue/nr_zones");
> > +		if (sortdata)
> > +			str2u64(str, sortdata);
> > +		break;
> > +	case COL_ZONE_OMAX:
> > +		ul_path_read_string(dev->sysfs, &str, "queue/max_open_zones");
> > +		if (!str)
> > +			str = xstrdup("0");
> > +		if (sortdata)
> > +			str2u64(str, sortdata);
> > +		break;
> > +	case COL_ZONE_AMAX:
> > +		ul_path_read_string(dev->sysfs, &str, "queue/max_active_zones");
> > +		if (!str)
> > +			str = xstrdup("0");
> > +		if (sortdata)
> > +			str2u64(str, sortdata);
> > +		break;
> >  	case COL_DAX:
> >  		ul_path_read_string(dev->sysfs, &str, "queue/dax");
> >  		break;
> > 
> 
> 
> -- 
> Damien Le Moal
> Western Digital Research
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes
  2021-08-29 23:07   ` Damien Le Moal
@ 2021-08-30  1:21     ` Naohiro Aota
  0 siblings, 0 replies; 12+ messages in thread
From: Naohiro Aota @ 2021-08-30  1:21 UTC (permalink / raw)
  To: Damien Le Moal; +Cc: Karel Zak, util-linux

On Sun, Aug 29, 2021 at 11:07:10PM +0000, Damien Le Moal wrote:
> On 2021/08/27 16:35, Naohiro Aota wrote:
> > Factor out a new function device_read_bytes() to read a sysfs path as bytes
> > for a preparation for the next commit and to reduce the code duplication.
> > 
> > Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> > ---
> >  misc-utils/lsblk.c | 45 ++++++++++++++++++++-------------------------
> >  1 file changed, 20 insertions(+), 25 deletions(-)
> > 
> > diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> > index 100eba0779f8..775a6d832076 100644
> > --- a/misc-utils/lsblk.c
> > +++ b/misc-utils/lsblk.c
> > @@ -708,6 +708,24 @@ static uint64_t device_get_discard_granularity(struct lsblk_device *dev)
> >  	return dev->discard_granularity;
> >  }
> >  
> > +static void device_read_bytes(struct lsblk_device *dev, char *path, char **str,
> > +			      uint64_t *sortdata)
> > +{
> > +	if (lsblk->bytes) {
> > +		ul_path_read_string(dev->sysfs, str, path);
> > +		if (sortdata)
> > +			str2u64(*str, sortdata);
> 
> You could return early here to avoid the else...

Yes, that will be more simple. I'll send a new series with the fix to
the "max" description.

> > +	} else {
> > +		uint64_t x;
> > +
> > +		if (ul_path_read_u64(dev->sysfs, &x, path) == 0) {
> > +			*str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> > +			if (sortdata)
> > +				*sortdata = x;
> > +		}
> > +	}
> > +}
> > +
> >  /*
> >   * Generates data (string) for column specified by column ID for specified device. If sortdata
> >   * is not NULL then returns number usable to sort the column if the data are available for the
> > @@ -1033,18 +1051,7 @@ static char *device_get_data(
> >  		}
> >  		break;
> >  	case COL_DMAX:
> > -		if (lsblk->bytes) {
> > -			ul_path_read_string(dev->sysfs, &str, "queue/discard_max_bytes");
> > -			if (sortdata)
> > -				str2u64(str, sortdata);
> > -		} else {
> > -			uint64_t x;
> > -			if (ul_path_read_u64(dev->sysfs, &x, "queue/discard_max_bytes") == 0) {
> > -				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> > -				if (sortdata)
> > -					*sortdata = x;
> > -			}
> > -		}
> > +		device_read_bytes(dev, "queue/discard_max_bytes", &str, sortdata);
> >  		break;
> >  	case COL_DZERO:
> >  		if (device_get_discard_granularity(dev) > 0)
> > @@ -1053,19 +1060,7 @@ static char *device_get_data(
> >  			str = xstrdup("0");
> >  		break;
> >  	case COL_WSAME:
> > -		if (lsblk->bytes) {
> > -			ul_path_read_string(dev->sysfs, &str, "queue/write_same_max_bytes");
> > -			if (sortdata)
> > -				str2u64(str, sortdata);
> > -		} else {
> > -			uint64_t x;
> > -
> > -			if (ul_path_read_u64(dev->sysfs, &x, "queue/write_same_max_bytes") == 0) {
> > -				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> > -				if (sortdata)
> > -					*sortdata = x;
> > -			}
> > -		}
> > +		device_read_bytes(dev, "queue/write_same_max_bytes", &str, sortdata);
> >  		if (!str)
> >  			str = xstrdup("0");
> >  		break;
> > 
> 
> Apart from the optional nit above, looks good to me.
> 
> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
> 
> 
> -- 
> Damien Le Moal
> Western Digital Research
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] lsblk: add columns of zoned parameters
  2021-08-30  1:08     ` Naohiro Aota
@ 2021-08-30  1:50       ` Damien Le Moal
  2021-08-30  5:15         ` Naohiro Aota
  0 siblings, 1 reply; 12+ messages in thread
From: Damien Le Moal @ 2021-08-30  1:50 UTC (permalink / raw)
  To: Naohiro Aota; +Cc: Karel Zak, util-linux

On 2021/08/30 10:08, Naohiro Aota wrote:
> On Sun, Aug 29, 2021 at 11:10:18PM +0000, Damien Le Moal wrote:
>> On 2021/08/27 16:35, Naohiro Aota wrote:
>>> Several parameters for zoned devices are missing from lsblk's columns. This
>>> commit introduces them as following.
>>>
>>>  ZONE-SZ    zone size
>>>  ZONE-GRAN  zone write granularity
>>
>> ZONE-WGRAN ? (to enforce the point that is a WRITE granularity).
> 
> I changed WGRAN to GRAN to follow DISC-GRAN (discard granularity) and
> to have a shorter name. But, either is fine for me.

"DISC" in "DISC-GRAN" qualifies the granularity: it is clear that it is for
discard. With ZONE-GRAN, you do not get the qualifier since zone granularity
does not mean anything. I really think ZONE-WGRAN or ZONE-WRGRAN would be clearer.

> 
>>
>>>  ZONE-APP   zone append max bytes
>>>  ZONE-NR    number of zones
>>>  ZONE-OMAX  max open zones
>>>  ZONE-AMAX  max active zones
>>>
>>> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
>>> ---
>>>  bash-completion/lsblk |  3 ++-
>>>  misc-utils/lsblk.c    | 52 +++++++++++++++++++++++++++++++++++++++++++
>>>  2 files changed, 54 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/bash-completion/lsblk b/bash-completion/lsblk
>>> index 731ef3f4095d..c9ebbdcedef6 100644
>>> --- a/bash-completion/lsblk
>>> +++ b/bash-completion/lsblk
>>> @@ -10,7 +10,8 @@ _lsblk_module()
>>>  		LABEL UUID PTUUID PTTYPE PARTTYPE PARTTYPENAME PARTLABEL PARTUUID PARTFLAGS RA
>>>  		RO RM HOTPLUG MODEL SERIAL SIZE STATE OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO
>>>  		PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
>>> -		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED DAX
>>> +		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED ZONE-SZ ZONE-GRAN
>>> +		ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX DAX
>>>  	"
>>>  
>>>  	case $prev in
>>> diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
>>> index 775a6d832076..108c8187498e 100644
>>> --- a/misc-utils/lsblk.c
>>> +++ b/misc-utils/lsblk.c
>>> @@ -123,6 +123,12 @@ enum {
>>>  	COL_WSAME,
>>>  	COL_WWN,
>>>  	COL_ZONED,
>>> +	COL_ZONESIZE,
>>> +	COL_ZONEWRITEGRAN,
>>> +	COL_ZONEAPPEND,
>>
>> COL_ZONESZ
>> COL_ZONEWGRAN
>> COL_ZONEAPP
>>
>> To be inline with the columns display names ?
> 
> Sure. I'll fix.
> 
>>> +	COL_ZONE_NR,
>>> +	COL_ZONE_OMAX,
>>> +	COL_ZONE_AMAX,
>>>  };
>>>  /* basic table settings */
>>> @@ -213,6 +219,12 @@ static struct colinfo infos[] = {
>>>  	[COL_WSAME] = { "WSAME", 6, SCOLS_FL_RIGHT, N_("write same max bytes"), COLTYPE_SIZE },
>>>  	[COL_WWN] = { "WWN", 18, 0, N_("unique storage identifier") },
>>>  	[COL_ZONED] = { "ZONED", 0.3, 0, N_("zone model") },
>>> +	[COL_ZONESIZE] = { "ZONE-SZ", 9, SCOLS_FL_RIGHT, N_("zone size"), COLTYPE_NUM },
>>> +	[COL_ZONEWRITEGRAN] = { "ZONE-GRAN", 10, SCOLS_FL_RIGHT, N_("zone write granularity"), COLTYPE_NUM },
>>> +	[COL_ZONEAPPEND] = { "ZONE-APP", 11, SCOLS_FL_RIGHT, N_("zone append max bytes"), COLTYPE_NUM },
>>> +	[COL_ZONE_NR] = { "ZONE-NR", 8, SCOLS_FL_RIGHT, N_("number of zones"), COLTYPE_NUM },
>>> +	[COL_ZONE_OMAX] = { "ZONE-OMAX", 10, SCOLS_FL_RIGHT, N_("max open zones"), COLTYPE_NUM },
>>> +	[COL_ZONE_AMAX] = { "ZONE-AMAX", 10, SCOLS_FL_RIGHT, N_("max active zones"), COLTYPE_NUM },
>>>  };
>>>  
>>>  struct lsblk *lsblk;	/* global handler */
>>> @@ -1067,6 +1079,46 @@ static char *device_get_data(
>>>  	case COL_ZONED:
>>>  		ul_path_read_string(dev->sysfs, &str, "queue/zoned");
>>>  		break;
>>> +	case COL_ZONESIZE:
>>> +	{
>>> +		uint64_t x;
>>> +
>>> +		if (ul_path_read_u64(dev->sysfs, &x, "queue/chunk_sectors") == 0) {
>>> +			x <<= 9;
>>> +			if (lsblk->bytes)
>>> +				xasprintf(&str, "%ju", x);
>>> +			else
>>> +				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
>>> +			if (sortdata)
>>> +				*sortdata = x;
>>> +		}
>>> +		break;
>>> +	}
>>> +	case COL_ZONEWRITEGRAN:
>>> +		device_read_bytes(dev, "queue/zone_write_granularity", &str, sortdata);
>>> +		break;
>>> +	case COL_ZONEAPPEND:
>>> +		device_read_bytes(dev, "queue/zone_append_max_bytes", &str, sortdata);
>>> +		break;
>>> +	case COL_ZONE_NR:
>>> +		ul_path_read_string(dev->sysfs, &str, "queue/nr_zones");
>>> +		if (sortdata)
>>> +			str2u64(str, sortdata);
>>> +		break;
>>> +	case COL_ZONE_OMAX:
>>> +		ul_path_read_string(dev->sysfs, &str, "queue/max_open_zones");
>>> +		if (!str)
>>> +			str = xstrdup("0");
>>> +		if (sortdata)
>>> +			str2u64(str, sortdata);
>>> +		break;
>>> +	case COL_ZONE_AMAX:
>>> +		ul_path_read_string(dev->sysfs, &str, "queue/max_active_zones");
>>> +		if (!str)
>>> +			str = xstrdup("0");
>>> +		if (sortdata)
>>> +			str2u64(str, sortdata);
>>> +		break;
>>>  	case COL_DAX:
>>>  		ul_path_read_string(dev->sysfs, &str, "queue/dax");
>>>  		break;
>>>
>>
>>
>> -- 
>> Damien Le Moal
>> Western Digital Research
>>


-- 
Damien Le Moal
Western Digital Research

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/3] lsblk: add columns of zoned parameters
  2021-08-30  1:50       ` Damien Le Moal
@ 2021-08-30  5:15         ` Naohiro Aota
  0 siblings, 0 replies; 12+ messages in thread
From: Naohiro Aota @ 2021-08-30  5:15 UTC (permalink / raw)
  To: Damien Le Moal; +Cc: Karel Zak, util-linux

On Mon, Aug 30, 2021 at 01:50:58AM +0000, Damien Le Moal wrote:
> On 2021/08/30 10:08, Naohiro Aota wrote:
> > On Sun, Aug 29, 2021 at 11:10:18PM +0000, Damien Le Moal wrote:
> >> On 2021/08/27 16:35, Naohiro Aota wrote:
> >>> Several parameters for zoned devices are missing from lsblk's columns. This
> >>> commit introduces them as following.
> >>>
> >>>  ZONE-SZ    zone size
> >>>  ZONE-GRAN  zone write granularity
> >>
> >> ZONE-WGRAN ? (to enforce the point that is a WRITE granularity).
> > 
> > I changed WGRAN to GRAN to follow DISC-GRAN (discard granularity) and
> > to have a shorter name. But, either is fine for me.
> 
> "DISC" in "DISC-GRAN" qualifies the granularity: it is clear that it is for
> discard. With ZONE-GRAN, you do not get the qualifier since zone granularity
> does not mean anything. I really think ZONE-WGRAN or ZONE-WRGRAN would be clearer.

Make sense. I'll use ZONE-WGRAN in the next series.

> > 
> >>
> >>>  ZONE-APP   zone append max bytes
> >>>  ZONE-NR    number of zones
> >>>  ZONE-OMAX  max open zones
> >>>  ZONE-AMAX  max active zones
> >>>
> >>> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> >>> ---
> >>>  bash-completion/lsblk |  3 ++-
> >>>  misc-utils/lsblk.c    | 52 +++++++++++++++++++++++++++++++++++++++++++
> >>>  2 files changed, 54 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/bash-completion/lsblk b/bash-completion/lsblk
> >>> index 731ef3f4095d..c9ebbdcedef6 100644
> >>> --- a/bash-completion/lsblk
> >>> +++ b/bash-completion/lsblk
> >>> @@ -10,7 +10,8 @@ _lsblk_module()
> >>>  		LABEL UUID PTUUID PTTYPE PARTTYPE PARTTYPENAME PARTLABEL PARTUUID PARTFLAGS RA
> >>>  		RO RM HOTPLUG MODEL SERIAL SIZE STATE OWNER GROUP MODE ALIGNMENT MIN-IO OPT-IO
> >>>  		PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE TYPE DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
> >>> -		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED DAX
> >>> +		WSAME WWN RAND PKNAME HCTL TRAN SUBSYSTEMS REV VENDOR ZONED ZONE-SZ ZONE-GRAN
> >>> +		ZONE-APP ZONE-NR ZONE-OMAX ZONE-AMAX DAX
> >>>  	"
> >>>  
> >>>  	case $prev in
> >>> diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
> >>> index 775a6d832076..108c8187498e 100644
> >>> --- a/misc-utils/lsblk.c
> >>> +++ b/misc-utils/lsblk.c
> >>> @@ -123,6 +123,12 @@ enum {
> >>>  	COL_WSAME,
> >>>  	COL_WWN,
> >>>  	COL_ZONED,
> >>> +	COL_ZONESIZE,
> >>> +	COL_ZONEWRITEGRAN,
> >>> +	COL_ZONEAPPEND,
> >>
> >> COL_ZONESZ
> >> COL_ZONEWGRAN
> >> COL_ZONEAPP
> >>
> >> To be inline with the columns display names ?
> > 
> > Sure. I'll fix.
> > 
> >>> +	COL_ZONE_NR,
> >>> +	COL_ZONE_OMAX,
> >>> +	COL_ZONE_AMAX,
> >>>  };
> >>>  /* basic table settings */
> >>> @@ -213,6 +219,12 @@ static struct colinfo infos[] = {
> >>>  	[COL_WSAME] = { "WSAME", 6, SCOLS_FL_RIGHT, N_("write same max bytes"), COLTYPE_SIZE },
> >>>  	[COL_WWN] = { "WWN", 18, 0, N_("unique storage identifier") },
> >>>  	[COL_ZONED] = { "ZONED", 0.3, 0, N_("zone model") },
> >>> +	[COL_ZONESIZE] = { "ZONE-SZ", 9, SCOLS_FL_RIGHT, N_("zone size"), COLTYPE_NUM },
> >>> +	[COL_ZONEWRITEGRAN] = { "ZONE-GRAN", 10, SCOLS_FL_RIGHT, N_("zone write granularity"), COLTYPE_NUM },
> >>> +	[COL_ZONEAPPEND] = { "ZONE-APP", 11, SCOLS_FL_RIGHT, N_("zone append max bytes"), COLTYPE_NUM },
> >>> +	[COL_ZONE_NR] = { "ZONE-NR", 8, SCOLS_FL_RIGHT, N_("number of zones"), COLTYPE_NUM },
> >>> +	[COL_ZONE_OMAX] = { "ZONE-OMAX", 10, SCOLS_FL_RIGHT, N_("max open zones"), COLTYPE_NUM },
> >>> +	[COL_ZONE_AMAX] = { "ZONE-AMAX", 10, SCOLS_FL_RIGHT, N_("max active zones"), COLTYPE_NUM },
> >>>  };
> >>>  
> >>>  struct lsblk *lsblk;	/* global handler */
> >>> @@ -1067,6 +1079,46 @@ static char *device_get_data(
> >>>  	case COL_ZONED:
> >>>  		ul_path_read_string(dev->sysfs, &str, "queue/zoned");
> >>>  		break;
> >>> +	case COL_ZONESIZE:
> >>> +	{
> >>> +		uint64_t x;
> >>> +
> >>> +		if (ul_path_read_u64(dev->sysfs, &x, "queue/chunk_sectors") == 0) {
> >>> +			x <<= 9;
> >>> +			if (lsblk->bytes)
> >>> +				xasprintf(&str, "%ju", x);
> >>> +			else
> >>> +				str = size_to_human_string(SIZE_SUFFIX_1LETTER, x);
> >>> +			if (sortdata)
> >>> +				*sortdata = x;
> >>> +		}
> >>> +		break;
> >>> +	}
> >>> +	case COL_ZONEWRITEGRAN:
> >>> +		device_read_bytes(dev, "queue/zone_write_granularity", &str, sortdata);
> >>> +		break;
> >>> +	case COL_ZONEAPPEND:
> >>> +		device_read_bytes(dev, "queue/zone_append_max_bytes", &str, sortdata);
> >>> +		break;
> >>> +	case COL_ZONE_NR:
> >>> +		ul_path_read_string(dev->sysfs, &str, "queue/nr_zones");
> >>> +		if (sortdata)
> >>> +			str2u64(str, sortdata);
> >>> +		break;
> >>> +	case COL_ZONE_OMAX:
> >>> +		ul_path_read_string(dev->sysfs, &str, "queue/max_open_zones");
> >>> +		if (!str)
> >>> +			str = xstrdup("0");
> >>> +		if (sortdata)
> >>> +			str2u64(str, sortdata);
> >>> +		break;
> >>> +	case COL_ZONE_AMAX:
> >>> +		ul_path_read_string(dev->sysfs, &str, "queue/max_active_zones");
> >>> +		if (!str)
> >>> +			str = xstrdup("0");
> >>> +		if (sortdata)
> >>> +			str2u64(str, sortdata);
> >>> +		break;
> >>>  	case COL_DAX:
> >>>  		ul_path_read_string(dev->sysfs, &str, "queue/dax");
> >>>  		break;
> >>>
> >>
> >>
> >> -- 
> >> Damien Le Moal
> >> Western Digital Research
> >>
> 
> 
> -- 
> Damien Le Moal
> Western Digital Research
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-08-30  5:15 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-27  7:34 [PATCH v2 0/3] add columns for zoned parameters Naohiro Aota
2021-08-27  7:34 ` [PATCH v2 1/3] lsblk: factor out function to read sysfs param as bytes Naohiro Aota
2021-08-29 23:07   ` Damien Le Moal
2021-08-30  1:21     ` Naohiro Aota
2021-08-27  7:34 ` [PATCH v2 2/3] lsblk: add columns of zoned parameters Naohiro Aota
2021-08-29 23:10   ` Damien Le Moal
2021-08-30  1:08     ` Naohiro Aota
2021-08-30  1:50       ` Damien Le Moal
2021-08-30  5:15         ` Naohiro Aota
2021-08-29 23:15   ` Damien Le Moal
2021-08-27  7:34 ` [PATCH v2 3/3] lsblk: add zoned columns to "lsblk -z" Naohiro Aota
2021-08-29 23:14   ` Damien Le Moal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).