All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: Chandan Babu R <chandan.babu@oracle.com>
Cc: linux-xfs@vger.kernel.org, cem@kernel.org
Subject: Re: [PATCH V3 19/23] mdrestore: Replace metadump header pointer argument with a union pointer
Date: Tue, 1 Aug 2023 17:01:46 -0700	[thread overview]
Message-ID: <20230802000146.GE11336@frogsfrogsfrogs> (raw)
In-Reply-To: <20230724043527.238600-20-chandan.babu@oracle.com>

On Mon, Jul 24, 2023 at 10:05:23AM +0530, Chandan Babu R wrote:
> We will need two variants of read_header(), show_info() and restore() helper
> functions to support two versions of metadump formats. To this end, A future
> commit will introduce a vector of function pointers to work with the two
> metadump formats. To have a common function signature for the function
> pointers, this commit replaces the first argument of the previously listed
> function pointers from "struct xfs_metablock *" with "union
> mdrestore_headers *".
> 
> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>

The overall code changes look fine to me, but I'm a little mystified why
the *previous* patch introduces union mdrestore_headers and the
mdrestore ops without using either of them.

IOWs, I think you could delete patch 18, move the union definition into
this patch, and move the mdrestore ops definitions that used to be in
patch 18 into patch 20.

--D

> ---
>  mdrestore/xfs_mdrestore.c | 61 +++++++++++++++++++--------------------
>  1 file changed, 29 insertions(+), 32 deletions(-)
> 
> diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c
> index 53c5f68e..4d1bbf28 100644
> --- a/mdrestore/xfs_mdrestore.c
> +++ b/mdrestore/xfs_mdrestore.c
> @@ -91,27 +91,25 @@ open_device(
>  
>  static void
>  read_header(
> -	struct xfs_metablock	*mb,
> +	union mdrestore_headers	*h,
>  	FILE			*md_fp)
>  {
> -	mb->mb_magic = cpu_to_be32(XFS_MD_MAGIC_V1);
> -
> -	if (fread((uint8_t *)mb + sizeof(mb->mb_magic),
> -			sizeof(*mb) - sizeof(mb->mb_magic), 1, md_fp) != 1)
> +	if (fread((uint8_t *)&(h->v1.mb_count),
> +			sizeof(h->v1) - sizeof(h->magic), 1, md_fp) != 1)
>  		fatal("error reading from metadump file\n");
>  }
>  
>  static void
>  show_info(
> -	struct xfs_metablock	*mb,
> +	union mdrestore_headers	*h,
>  	const char		*md_file)
>  {
> -	if (mb->mb_info & XFS_METADUMP_INFO_FLAGS) {
> +	if (h->v1.mb_info & XFS_METADUMP_INFO_FLAGS) {
>  		printf("%s: %sobfuscated, %s log, %s metadata blocks\n",
>  			md_file,
> -			mb->mb_info & XFS_METADUMP_OBFUSCATED ? "":"not ",
> -			mb->mb_info & XFS_METADUMP_DIRTYLOG ? "dirty":"clean",
> -			mb->mb_info & XFS_METADUMP_FULLBLOCKS ? "full":"zeroed");
> +			h->v1.mb_info & XFS_METADUMP_OBFUSCATED ? "":"not ",
> +			h->v1.mb_info & XFS_METADUMP_DIRTYLOG ? "dirty":"clean",
> +			h->v1.mb_info & XFS_METADUMP_FULLBLOCKS ? "full":"zeroed");
>  	} else {
>  		printf("%s: no informational flags present\n", md_file);
>  	}
> @@ -129,10 +127,10 @@ show_info(
>   */
>  static void
>  restore(
> +	union mdrestore_headers *h,
>  	FILE			*md_fp,
>  	int			ddev_fd,
> -	int			is_target_file,
> -	const struct xfs_metablock	*mbp)
> +	int			is_target_file)
>  {
>  	struct xfs_metablock	*metablock;	/* header + index + blocks */
>  	__be64			*block_index;
> @@ -144,14 +142,14 @@ restore(
>  	xfs_sb_t		sb;
>  	int64_t			bytes_read;
>  
> -	block_size = 1 << mbp->mb_blocklog;
> +	block_size = 1 << h->v1.mb_blocklog;
>  	max_indices = (block_size - sizeof(xfs_metablock_t)) / sizeof(__be64);
>  
>  	metablock = (xfs_metablock_t *)calloc(max_indices + 1, block_size);
>  	if (metablock == NULL)
>  		fatal("memory allocation failure\n");
>  
> -	mb_count = be16_to_cpu(mbp->mb_count);
> +	mb_count = be16_to_cpu(h->v1.mb_count);
>  	if (mb_count == 0 || mb_count > max_indices)
>  		fatal("bad block count: %u\n", mb_count);
>  
> @@ -165,8 +163,7 @@ restore(
>  	if (block_index[0] != 0)
>  		fatal("first block is not the primary superblock\n");
>  
> -
> -	if (fread(block_buffer, mb_count << mbp->mb_blocklog, 1, md_fp) != 1)
> +	if (fread(block_buffer, mb_count << h->v1.mb_blocklog, 1, md_fp) != 1)
>  		fatal("error reading from metadump file\n");
>  
>  	libxfs_sb_from_disk(&sb, (struct xfs_dsb *)block_buffer);
> @@ -213,7 +210,7 @@ restore(
>  
>  		for (cur_index = 0; cur_index < mb_count; cur_index++) {
>  			if (pwrite(ddev_fd, &block_buffer[cur_index <<
> -					mbp->mb_blocklog], block_size,
> +					h->v1.mb_blocklog], block_size,
>  					be64_to_cpu(block_index[cur_index]) <<
>  						BBSHIFT) < 0)
>  				fatal("error writing block %llu: %s\n",
> @@ -232,11 +229,11 @@ restore(
>  		if (mb_count > max_indices)
>  			fatal("bad block count: %u\n", mb_count);
>  
> -		if (fread(block_buffer, mb_count << mbp->mb_blocklog,
> +		if (fread(block_buffer, mb_count << h->v1.mb_blocklog,
>  				1, md_fp) != 1)
>  			fatal("error reading from metadump file\n");
>  
> -		bytes_read += block_size + (mb_count << mbp->mb_blocklog);
> +		bytes_read += block_size + (mb_count << h->v1.mb_blocklog);
>  	}
>  
>  	if (mdrestore.progress_since_warning)
> @@ -265,15 +262,14 @@ usage(void)
>  
>  int
>  main(
> -	int 		argc,
> -	char 		**argv)
> +	int			argc,
> +	char			**argv)
>  {
> -	FILE		*src_f;
> -	int		dst_fd;
> -	int		c;
> -	bool		is_target_file;
> -	uint32_t	magic;
> -	struct xfs_metablock	mb;
> +	union mdrestore_headers headers;
> +	FILE			*src_f;
> +	int			dst_fd;
> +	int			c;
> +	bool			is_target_file;
>  
>  	mdrestore.show_progress = false;
>  	mdrestore.show_info = false;
> @@ -320,20 +316,21 @@ main(
>  			fatal("cannot open source dump file\n");
>  	}
>  
> -	if (fread(&magic, sizeof(magic), 1, src_f) != 1)
> +	if (fread(&headers.magic, sizeof(headers.magic), 1, src_f) != 1)
>  		fatal("Unable to read metadump magic from metadump file\n");
>  
> -	switch (be32_to_cpu(magic)) {
> +	switch (be32_to_cpu(headers.magic)) {
>  	case XFS_MD_MAGIC_V1:
> -		read_header(&mb, src_f);
>  		break;
>  	default:
>  		fatal("specified file is not a metadata dump\n");
>  		break;
>  	}
>  
> +	read_header(&headers, src_f);
> +
>  	if (mdrestore.show_info) {
> -		show_info(&mb, argv[optind]);
> +		show_info(&headers, argv[optind]);
>  
>  		if (argc - optind == 1)
>  			exit(0);
> @@ -344,7 +341,7 @@ main(
>  	/* check and open target */
>  	dst_fd = open_device(argv[optind], &is_target_file);
>  
> -	restore(src_f, dst_fd, is_target_file, &mb);
> +	restore(&headers, src_f, dst_fd, is_target_file);
>  
>  	close(dst_fd);
>  	if (src_f != stdin)
> -- 
> 2.39.1
> 

  reply	other threads:[~2023-08-02  0:01 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-24  4:35 [PATCH V3 00/23] Metadump v2 Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 01/23] metadump: Use boolean values true/false instead of 1/0 Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 02/23] mdrestore: Fix logic used to check if target device is large enough Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 03/23] metadump: Declare boolean variables with bool type Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 04/23] metadump: Define and use struct metadump Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 05/23] metadump: Add initialization and release functions Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 06/23] metadump: Postpone invocation of init_metadump() Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 07/23] metadump: Introduce struct metadump_ops Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 08/23] metadump: Introduce metadump v1 operations Chandan Babu R
2023-08-01 23:44   ` Darrick J. Wong
2023-07-24  4:35 ` [PATCH V3 09/23] metadump: Rename XFS_MD_MAGIC to XFS_MD_MAGIC_V1 Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 10/23] metadump: Define metadump v2 ondisk format structures and macros Chandan Babu R
2023-08-01 23:47   ` Darrick J. Wong
2023-08-02 13:08     ` Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 11/23] metadump: Define metadump ops for v2 format Chandan Babu R
2023-08-01 23:49   ` Darrick J. Wong
2023-08-02 13:08     ` Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 12/23] xfs_db: Add support to read from external log device Chandan Babu R
2023-08-01 23:49   ` Darrick J. Wong
2023-07-24  4:35 ` [PATCH V3 13/23] metadump: Add support for passing version option Chandan Babu R
2023-08-01 23:51   ` Darrick J. Wong
2023-08-02 13:18     ` Chandan Babu R
2023-08-02 17:14       ` Darrick J. Wong
2023-07-24  4:35 ` [PATCH V3 14/23] mdrestore: Declare boolean variables with bool type Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 15/23] mdrestore: Define and use struct mdrestore Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 16/23] mdrestore: Detect metadump v1 magic before reading the header Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 17/23] mdrestore: Add open_device(), read_header() and show_info() functions Chandan Babu R
2023-08-01 23:54   ` Darrick J. Wong
2023-07-24  4:35 ` [PATCH V3 18/23] mdrestore: Introduce struct mdrestore_ops Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 19/23] mdrestore: Replace metadump header pointer argument with a union pointer Chandan Babu R
2023-08-02  0:01   ` Darrick J. Wong [this message]
2023-08-02 13:17     ` Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 20/23] mdrestore: Introduce mdrestore v1 operations Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 21/23] mdrestore: Extract target device size verification into a function Chandan Babu R
2023-07-24  4:35 ` [PATCH V3 22/23] mdrestore: Define mdrestore ops for v2 format Chandan Babu R
2023-08-02 17:16   ` Darrick J. Wong
2023-07-24  4:35 ` [PATCH V3 23/23] mdrestore: Add support for passing log device as an argument Chandan Babu R
2023-10-31 16:46 ` [PATCH V3 00/23] Metadump v2 Darrick J. Wong
2023-11-01 14:58   ` Carlos Maiolino
2023-11-01 18:02     ` Darrick J. Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230802000146.GE11336@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=cem@kernel.org \
    --cc=chandan.babu@oracle.com \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.