All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Daniel Rosenberg <drosen@google.com>
Cc: kernel-team@android.com, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH 1/2] libf2fs: Accept Sparse files with non 4K Blocksize
Date: Mon, 29 Jan 2024 12:14:40 -0800	[thread overview]
Message-ID: <ZbgHMKoDowzNEy1V@google.com> (raw)
In-Reply-To: <20240126221845.265859-1-drosen@google.com>

On 01/26, Daniel Rosenberg wrote:
> Since we may not know the block size when initializing sparse files, we
> should assume that the sparse file's blocksize is correct.
> 
> Signed-off-by: Daniel Rosenberg <drosen@google.com>
> ---
>  fsck/mount.c     | 20 +++++++++++++-------
>  lib/libf2fs_io.c | 11 +++++++----
>  2 files changed, 20 insertions(+), 11 deletions(-)
> 
> diff --git a/fsck/mount.c b/fsck/mount.c
> index 30c6228..7bbec3f 100644
> --- a/fsck/mount.c
> +++ b/fsck/mount.c
> @@ -995,6 +995,10 @@ int sanity_check_raw_super(struct f2fs_super_block *sb, enum SB_ADDR sb_addr)
>  		return -1;
>  
>  	blocksize = 1 << get_sb(log_blocksize);
> +	if (c.sparse_mode && F2FS_BLKSIZE != blocksize) {
> +		MSG(0, "Invalid blocksize (%u), does not equal sparse file blocksize (%u)",
> +			F2FS_BLKSIZE);

Applied with the below fix.
--- a/fsck/mount.c
+++ b/fsck/mount.c
@@ -997,7 +997,7 @@ int sanity_check_raw_super(struct f2fs_super_block *sb, enum SB_ADDR sb_addr)
        blocksize = 1 << get_sb(log_blocksize);
        if (c.sparse_mode && F2FS_BLKSIZE != blocksize) {
                MSG(0, "Invalid blocksize (%u), does not equal sparse file blocksize (%u)",
-                       F2FS_BLKSIZE);
+                       F2FS_BLKSIZE, blocksize);
        }


> +	}
>  	if (blocksize < F2FS_MIN_BLKSIZE || blocksize > F2FS_MAX_BLKSIZE) {
>  		MSG(0, "Invalid blocksize (%u), must be between 4KB and 16KB\n",
>  			blocksize);
> @@ -3965,20 +3969,22 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi)
>  	sbi->active_logs = NR_CURSEG_TYPE;
>  	ret = validate_super_block(sbi, SB0_ADDR);
>  	if (ret) {
> -		/* Assuming 4K Block Size */
> -		c.blksize_bits = 12;
> -		c.blksize = 1 << c.blksize_bits;
> -		MSG(0, "Looking for secondary superblock assuming 4K Block Size\n");
> +		if (!c.sparse_mode) {
> +			/* Assuming 4K Block Size */
> +			c.blksize_bits = 12;
> +			c.blksize = 1 << c.blksize_bits;
> +			MSG(0, "Looking for secondary superblock assuming 4K Block Size\n");
> +		}
>  		ret = validate_super_block(sbi, SB1_ADDR);
> -		if (ret) {
> +		if (ret && !c.sparse_mode) {
>  			/* Trying 16K Block Size */
>  			c.blksize_bits = 14;
>  			c.blksize = 1 << c.blksize_bits;
>  			MSG(0, "Looking for secondary superblock assuming 16K Block Size\n");
>  			ret = validate_super_block(sbi, SB1_ADDR);
> -			if (ret)
> -				return -1;
>  		}
> +		if (ret)
> +			return -1;
>  	}
>  	sb = F2FS_RAW_SUPER(sbi);
>  	c.cache_config.num_cache_entry = num_cache_entry;
> diff --git a/lib/libf2fs_io.c b/lib/libf2fs_io.c
> index d76da83..97c91ef 100644
> --- a/lib/libf2fs_io.c
> +++ b/lib/libf2fs_io.c
> @@ -662,14 +662,17 @@ int f2fs_init_sparse_file(void)
>  		if (!f2fs_sparse_file)
>  			return -1;
>  
> +		c.blksize = sparse_file_block_size(f2fs_sparse_file);
> +		c.blksize_bits = log_base_2(c.blksize);
> +		if (c.blksize_bits == -1) {
> +			MSG(0, "\tError: Sparse file blocksize not a power of 2.\n");
> +			return -1;
> +		}
> +
>  		c.device_size = sparse_file_len(f2fs_sparse_file, 0, 0);
>  		c.device_size &= (~((uint64_t)(F2FS_BLKSIZE - 1)));
>  	}
>  
> -	if (sparse_file_block_size(f2fs_sparse_file) != F2FS_BLKSIZE) {
> -		MSG(0, "\tError: Corrupted sparse file\n");
> -		return -1;
> -	}
>  	blocks_count = c.device_size / F2FS_BLKSIZE;
>  	blocks = calloc(blocks_count, sizeof(char *));
>  	if (!blocks) {
> 
> base-commit: bf5100606d63f6928799846b7322aa6f3f158bcf
> -- 
> 2.43.0.429.g432eaa2c6b-goog


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

      parent reply	other threads:[~2024-01-29 20:15 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-26 22:18 [f2fs-dev] [PATCH 1/2] libf2fs: Accept Sparse files with non 4K Blocksize Daniel Rosenberg via Linux-f2fs-devel
2024-01-26 22:18 ` [f2fs-dev] [PATCH 2/2] libf2fs: Fix possible memleak with Sparse Files Daniel Rosenberg via Linux-f2fs-devel
2024-01-29 20:14 ` Jaegeuk Kim [this message]

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=ZbgHMKoDowzNEy1V@google.com \
    --to=jaegeuk@kernel.org \
    --cc=drosen@google.com \
    --cc=kernel-team@android.com \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    /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.