Hm.

Would this be what @uplinkr might have encountered?

On Mon, Apr 14, 2025 at 4:13 AM Chao Yu via Linux-f2fs-devel
<linux-f2fs-devel@lists.sourceforge.net> wrote:
>
> w/ below testcase, resize will generate a corrupted image which
> contains inconsistent metadata:
>
> touch img
> truncate -s $((512*1024*1024*1024)) img
> mkfs.f2fs -f img $((256*1024*1024))
> resize.f2fs -s img -t $((1024*1024*1024))
> mount img /mnt/f2fs
>
> [   31.725200] F2FS-fs (loop0): Wrong bitmap size: sit: 192, sit_blk_cnt:4762
> [   31.728441] F2FS-fs (loop0): Failed to get valid F2FS checkpoint
>
> The root cause is safe mode (via -s option) is not compatible
> w/ expand resize, due to in safe mode, we will keep all parameters
> related to NAT, SIT, SSA area, e.g. sit_bitmap_size, however, we
> will update segment_count_main according new partition size, result
> in there is no enough sit_bitmap and SIT blocks to address the
> entire block address of new partition.
>
> Adding a check condition to avoid expanding partition in safe
> mode, and change manual accordingly.
>
> Signed-off-by: Chao Yu <c...@kernel.org>
> ---
>  fsck/resize.c     | 12 ++++++++----
>  man/resize.f2fs.8 |  2 +-
>  2 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/fsck/resize.c b/fsck/resize.c
> index 1ab7d75..58914ec 100644
> --- a/fsck/resize.c
> +++ b/fsck/resize.c
> @@ -756,18 +756,22 @@ int f2fs_resize(struct f2fs_sb_info *sbi)
>
>         /* may different sector size */
>         if ((c.target_sectors * c.sector_size >>
> -                       get_sb(log_blocksize)) < get_sb(block_count))
> +                       get_sb(log_blocksize)) < get_sb(block_count)) {
>                 if (!c.safe_resize) {
>                         ASSERT_MSG("Nothing to resize, now only supports 
> resizing with safe resize flag\n");
>                         return -1;
>                 } else {
>                         return f2fs_resize_shrink(sbi);
>                 }
> -       else if (((c.target_sectors * c.sector_size >>
> +       } else if (((c.target_sectors * c.sector_size >>
>                         get_sb(log_blocksize)) > get_sb(block_count)) ||
> -                       c.ignore_error)
> +                       c.ignore_error) {
> +               if (c.safe_resize) {
> +                       ASSERT_MSG("Expanding resize doesn't support safe 
> resize flag");
> +                       return -1;
> +               }
>                 return f2fs_resize_grow(sbi);
> -       else {
> +       } else {
>                 MSG(0, "Nothing to resize.\n");
>                 return 0;
>         }
> diff --git a/man/resize.f2fs.8 b/man/resize.f2fs.8
> index bdda4fd..5b6daf5 100644
> --- a/man/resize.f2fs.8
> +++ b/man/resize.f2fs.8
> @@ -69,7 +69,7 @@ Skip caution dialogue and resize partition directly.
>  Specify support write hint.
>  .TP
>  .BI \-s
> -Enable safe resize.
> +Enable safe resize, it can only be used w/ shrink resize.
>  .TP
>  .BI \-V
>  Print the version number and exit.
> --
> 2.49.0
>
>
>
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


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

Reply via email to