diff mbox series

[1/2] xfs_db: support computing btheight for all cursor types

Message ID 165176667420.247073.10421518802460549832.stgit@magnolia (mailing list archive)
State Accepted
Headers show
Series xfs_db: tweaks to btheight command | expand

Commit Message

Darrick J. Wong May 5, 2022, 4:04 p.m. UTC
From: Darrick J. Wong <djwong@kernel.org>

Add the special magic btree type value 'all' to the btheight command so
that we can display information about all known btree types at once.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 db/btheight.c     |   26 +++++++++++++++++++++++---
 man/man8/xfs_db.8 |    3 +++
 2 files changed, 26 insertions(+), 3 deletions(-)

Comments

Chandan Babu R May 6, 2022, 9:59 a.m. UTC | #1
On 05 May 2022 at 21:34, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
>
> Add the special magic btree type value 'all' to the btheight command so
> that we can display information about all known btree types at once.
>

Looks good.

Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>

> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
> ---
>  db/btheight.c     |   26 +++++++++++++++++++++++---
>  man/man8/xfs_db.8 |    3 +++
>  2 files changed, 26 insertions(+), 3 deletions(-)
>
>
> diff --git a/db/btheight.c b/db/btheight.c
> index 8aa17c89..e4cd4eda 100644
> --- a/db/btheight.c
> +++ b/db/btheight.c
> @@ -57,7 +57,7 @@ btheight_help(void)
>  "   -w min -- Show only the worst case scenario.\n"
>  "\n"
>  " Supported btree types:\n"
> -"   "
> +"   all "
>  ));
>  	for (i = 0, m = maps; i < ARRAY_SIZE(maps); i++, m++)
>  		printf("%s ", m->tag);
> @@ -107,7 +107,7 @@ calc_height(
>  
>  static int
>  construct_records_per_block(
> -	char		*tag,
> +	const char	*tag,
>  	int		blocksize,
>  	unsigned int	*records_per_block)
>  {
> @@ -235,7 +235,7 @@ _("%s: pointer size must be less than selected block size (%u bytes).\n"),
>  
>  static void
>  report(
> -	char			*tag,
> +	const char		*tag,
>  	unsigned int		report_what,
>  	unsigned long long	nr_records,
>  	unsigned int		blocksize)
> @@ -297,6 +297,19 @@ _("%s: worst case per %u-byte block: %u records (leaf) / %u keyptrs (node)\n"),
>  	}
>  }
>  
> +static void
> +report_all(
> +	unsigned int		report_what,
> +	unsigned long long	nr_records,
> +	unsigned int		blocksize)
> +{
> +	struct btmap		*m;
> +	int			i;
> +
> +	for (i = 0, m = maps; i < ARRAY_SIZE(maps); i++, m++)
> +		report(m->tag, report_what, nr_records, blocksize);
> +}
> +
>  static int
>  btheight_f(
>  	int		argc,
> @@ -366,6 +379,13 @@ _("The smallest block size this command will consider is 128 bytes.\n"));
>  		return 0;
>  	}
>  
> +	for (i = optind; i < argc; i++) {
> +		if (!strcmp(argv[i], "all")) {
> +			report_all(report_what, nr_records, blocksize);
> +			return 0;
> +		}
> +	}
> +
>  	for (i = optind; i < argc; i++)
>  		report(argv[i], report_what, nr_records, blocksize);
>  
> diff --git a/man/man8/xfs_db.8 b/man/man8/xfs_db.8
> index 58727495..55ac3487 100644
> --- a/man/man8/xfs_db.8
> +++ b/man/man8/xfs_db.8
> @@ -420,6 +420,9 @@ The supported btree types are:
>  .IR refcountbt ,
>  and
>  .IR rmapbt .
> +The magic value
> +.I all
> +can be used to walk through all btree types.
>  
>  Options are as follows:
>  .RS 1.0i
Christoph Hellwig May 10, 2022, 9:40 a.m. UTC | #2
Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
diff mbox series

Patch

diff --git a/db/btheight.c b/db/btheight.c
index 8aa17c89..e4cd4eda 100644
--- a/db/btheight.c
+++ b/db/btheight.c
@@ -57,7 +57,7 @@  btheight_help(void)
 "   -w min -- Show only the worst case scenario.\n"
 "\n"
 " Supported btree types:\n"
-"   "
+"   all "
 ));
 	for (i = 0, m = maps; i < ARRAY_SIZE(maps); i++, m++)
 		printf("%s ", m->tag);
@@ -107,7 +107,7 @@  calc_height(
 
 static int
 construct_records_per_block(
-	char		*tag,
+	const char	*tag,
 	int		blocksize,
 	unsigned int	*records_per_block)
 {
@@ -235,7 +235,7 @@  _("%s: pointer size must be less than selected block size (%u bytes).\n"),
 
 static void
 report(
-	char			*tag,
+	const char		*tag,
 	unsigned int		report_what,
 	unsigned long long	nr_records,
 	unsigned int		blocksize)
@@ -297,6 +297,19 @@  _("%s: worst case per %u-byte block: %u records (leaf) / %u keyptrs (node)\n"),
 	}
 }
 
+static void
+report_all(
+	unsigned int		report_what,
+	unsigned long long	nr_records,
+	unsigned int		blocksize)
+{
+	struct btmap		*m;
+	int			i;
+
+	for (i = 0, m = maps; i < ARRAY_SIZE(maps); i++, m++)
+		report(m->tag, report_what, nr_records, blocksize);
+}
+
 static int
 btheight_f(
 	int		argc,
@@ -366,6 +379,13 @@  _("The smallest block size this command will consider is 128 bytes.\n"));
 		return 0;
 	}
 
+	for (i = optind; i < argc; i++) {
+		if (!strcmp(argv[i], "all")) {
+			report_all(report_what, nr_records, blocksize);
+			return 0;
+		}
+	}
+
 	for (i = optind; i < argc; i++)
 		report(argv[i], report_what, nr_records, blocksize);
 
diff --git a/man/man8/xfs_db.8 b/man/man8/xfs_db.8
index 58727495..55ac3487 100644
--- a/man/man8/xfs_db.8
+++ b/man/man8/xfs_db.8
@@ -420,6 +420,9 @@  The supported btree types are:
 .IR refcountbt ,
 and
 .IR rmapbt .
+The magic value
+.I all
+can be used to walk through all btree types.
 
 Options are as follows:
 .RS 1.0i