All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Yu via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: jaegeuk@kernel.org
Cc: linux-f2fs-devel@lists.sourceforge.net
Subject: [f2fs-dev] [PATCH v2 1/2] Revert "resize.f2fs: add option for large_nat_bitmap feature"
Date: Fri, 11 Apr 2025 18:05:25 +0800	[thread overview]
Message-ID: <20250411100526.7939-1-chao@kernel.org> (raw)

This reverts commit daa0f8b9e9b1eea6c85e5c169b809254d9d7074e.

As Juhyung reported in [1]:

Here's what I did:
1. Remounted to checkpoint=disable
2. Create a dm-snapshot of the current root device
3. Mount snapshot to replay the log
4. Unmount
5. Resize sector 487248896 to 486539264
// ./resize.f2fs -d 3 -s -i /dev/mapper/snap -t 486539264

Latest f2fs-tools was used:
33c5b9539af2 f2fs_io: add fragread command to evaluate fragmented
buffer for reads

This reproduced the mount and fsck failure.

Mount log:
[442431.020594] F2FS-fs (dm-2): invalid crc_offset: 0
[442431.130055] F2FS-fs (dm-2): SIT is corrupted node# 13615201 vs 13616290
[442431.139684] F2FS-fs (dm-2): Failed to initialize F2FS segment manager (-117)

I checked below testcases:

truncate -s $((512*1024*1024*1024)) img
mkfs.f2fs -f img $((256*1024*1024))

Description		Test command					FSCK output
a) shrink w/ -s		resize.f2fs -s -i img -t $((128*1024*1024))	Fine
b) expand w/ -s		resize.f2fs -s -i img -t $((1024*1024*1024))	Corrupted
c) shrink w/o -s	resize.f2fs -i img -t $((128*1024*1024))	No run
d) expand w/o -s	resize.f2fs -i img -t $((1024*1024*1024))	Fine

Output from b):
[ASSERT] (check_block_count:2299)  --> Wrong SIT valid blocks: segno=0x29400, 0 vs. 13

The root cause is: safe mode (-s option) is conflict w/ large nat bitmap feature
(-i option), since once we enable large nat bitmap, layout of checkpoint will be
changed [2], we must relocate nat/sit_bitmap to the end of new location of
cp_checksum, however in safe mode, we won't change metadata of checkpoint, so we
need to keep nat/sit_bitmap as it is, which includes checksum data in its old
location.

Let's revert -i support for resize.f2fs first, and then reenable it after
fix and well tested.

Thanks a lot for the help from Juhyung, including providing reproducer and
hints.

[1] https://lore.kernel.org/linux-f2fs-devel/CAD14+f3D6iPOBxEgkZxxTsXCfwRKb9ph68JtUk3H9cn8ovLt9w@mail.gmail.com/
[2] https://lore.kernel.org/linux-f2fs-devel/20190514093340.40217-2-yuchao0@huawei.com/

Fixes: daa0f8b ("resize.f2fs: add option for large_nat_bitmap feature")
Reported-by: Ju Hyung Park <qkrwngud825@gmail.com>
Signed-off-by: Chao Yu <chao@kernel.org>
---
v2:
- remove entry in manual page
 fsck/main.c       | 6 +-----
 fsck/resize.c     | 3 ---
 man/resize.f2fs.8 | 6 ------
 3 files changed, 1 insertion(+), 14 deletions(-)

diff --git a/fsck/main.c b/fsck/main.c
index 524dbb1..af40613 100644
--- a/fsck/main.c
+++ b/fsck/main.c
@@ -141,7 +141,6 @@ void resize_usage()
 	MSG(0, "[options]:\n");
 	MSG(0, "  -d debug level [default:0]\n");
 	MSG(0, "  -H support write hint\n");
-	MSG(0, "  -i extended node bitmap, node ratio is 20%% by default\n");
 	MSG(0, "  -o overprovision percentage [default:auto]\n");
 	MSG(0, "  -s safe resize (Does not resize metadata)\n");
 	MSG(0, "  -t target sectors [default: device size]\n");
@@ -602,7 +601,7 @@ void f2fs_parse_options(int argc, char *argv[])
 #endif
 	} else if (!strcmp("resize.f2fs", prog)) {
 #ifdef WITH_RESIZE
-		const char *option_string = "d:fHst:io:V";
+		const char *option_string = "d:fHst:o:V";
 
 		c.func = RESIZE;
 		while ((option = getopt(argc, argv, option_string)) != EOF) {
@@ -637,9 +636,6 @@ void f2fs_parse_options(int argc, char *argv[])
 					ret = sscanf(optarg, "%"PRIx64"",
 							&c.target_sectors);
 				break;
-			case 'i':
-				c.large_nat_bitmap = 1;
-				break;
 			case 'o':
 				c.new_overprovision = atof(optarg);
 				break;
diff --git a/fsck/resize.c b/fsck/resize.c
index 9b3b071..2681b9f 100644
--- a/fsck/resize.c
+++ b/fsck/resize.c
@@ -531,9 +531,6 @@ static void rebuild_checkpoint(struct f2fs_sb_info *sbi,
 
 	/* update nat_bits flag */
 	flags = update_nat_bits_flags(new_sb, cp, get_cp(ckpt_flags));
-	if (c.large_nat_bitmap)
-		flags |= CP_LARGE_NAT_BITMAP_FLAG;
-
 	if (flags & CP_COMPACT_SUM_FLAG)
 		flags &= ~CP_COMPACT_SUM_FLAG;
 	if (flags & CP_LARGE_NAT_BITMAP_FLAG)
diff --git a/man/resize.f2fs.8 b/man/resize.f2fs.8
index d41ad79..02ff245 100644
--- a/man/resize.f2fs.8
+++ b/man/resize.f2fs.8
@@ -21,9 +21,6 @@ resize.f2fs \- resize filesystem size
 .B \-H
 ]
 [
-.B \-i
-]
-[
 .B \-s
 ]
 [
@@ -59,9 +56,6 @@ best number will be assigned automatically according to the partition size.
 .BI \-H
 Specify support write hint.
 .TP
-.BI \-i
-Enable extended node bitmap.
-.TP
 .BI \-s
 Enable safe resize.
 .TP
-- 
2.40.1



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

             reply	other threads:[~2025-04-11 10:06 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-11 10:05 Chao Yu via Linux-f2fs-devel [this message]
2025-04-11 10:05 ` [f2fs-dev] [PATCH v2 2/2] resize.f2fs: add caution message for resize Chao Yu via Linux-f2fs-devel
2025-04-11 10:20   ` Juhyung Park
2025-04-11 10:24     ` Chao Yu via Linux-f2fs-devel
2025-04-11 10:51     ` Chao Yu via Linux-f2fs-devel

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=20250411100526.7939-1-chao@kernel.org \
    --to=linux-f2fs-devel@lists.sourceforge.net \
    --cc=chao@kernel.org \
    --cc=jaegeuk@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.