diff mbox series

[f2fs-dev] f2fs-tools: disable nat_bits by default in Android

Message ID 20250305110506.2113560-1-chao@kernel.org (mailing list archive)
State Superseded
Headers show
Series [f2fs-dev] f2fs-tools: disable nat_bits by default in Android | expand

Commit Message

Chao Yu March 5, 2025, 11:05 a.m. UTC
This patch turns off nat_bits feature by default in Android,
for other scenario, keep it on and keep an eye on it.

Signed-off-by: Chao Yu <chao@kernel.org>
---
 fsck/mount.c            | 3 ++-
 include/f2fs_fs.h       | 6 ++++++
 mkfs/f2fs_format.c      | 3 ++-
 mkfs/f2fs_format_main.c | 1 +
 4 files changed, 11 insertions(+), 2 deletions(-)

Comments

Jaegeuk Kim March 7, 2025, 12:49 a.m. UTC | #1
On 03/05, Chao Yu wrote:
> This patch turns off nat_bits feature by default in Android,
> for other scenario, keep it on and keep an eye on it.
> 
> Signed-off-by: Chao Yu <chao@kernel.org>
> ---
>  fsck/mount.c            | 3 ++-
>  include/f2fs_fs.h       | 6 ++++++
>  mkfs/f2fs_format.c      | 3 ++-
>  mkfs/f2fs_format_main.c | 1 +
>  4 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/fsck/mount.c b/fsck/mount.c
> index a189ba7..2f4c631 100644
> --- a/fsck/mount.c
> +++ b/fsck/mount.c
> @@ -1708,7 +1708,8 @@ u32 update_nat_bits_flags(struct f2fs_super_block *sb,
>  	nat_bits_bytes = get_sb(segment_count_nat) << 5;
>  	nat_bits_blocks = F2FS_BYTES_TO_BLK((nat_bits_bytes << 1) + 8 +
>  						F2FS_BLKSIZE - 1);
> -	if (get_cp(cp_pack_total_block_count) <=
> +	if (!(c.disabled_feature & F2FS_FEATURE_NAT_BITS) &&

We need to set c.diabled_feature |= F2FS_FEATURE_NAT_BITS in fsck and others?

> +			get_cp(cp_pack_total_block_count) <=
>  			(1 << get_sb(log_blocks_per_seg)) - nat_bits_blocks)
>  		flags |= CP_NAT_BITS_FLAG;
>  	else
> diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
> index 0cb9228..bb40adc 100644
> --- a/include/f2fs_fs.h
> +++ b/include/f2fs_fs.h
> @@ -1471,6 +1471,11 @@ enum {
>  
>  #define MAX_CACHE_SUMS			8
>  
> +/* feature list in Android */
> +enum {
> +	F2FS_FEATURE_NAT_BITS = 0x0001,
> +};
> +
>  struct f2fs_configuration {
>  	uint32_t conf_reserved_sections;
>  	uint32_t reserved_segments;
> @@ -1537,6 +1542,7 @@ struct f2fs_configuration {
>  	int large_nat_bitmap;
>  	int fix_chksum;			/* fix old cp.chksum position */
>  	unsigned int feature;			/* defined features */
> +	unsigned int disabled_feature;	/* disabled feature, used for Android only */
>  	unsigned int quota_bits;	/* quota bits */
>  	time_t fixed_time;
>  	int roll_forward;
> diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c
> index 6635eed..c28ebb0 100644
> --- a/mkfs/f2fs_format.c
> +++ b/mkfs/f2fs_format.c
> @@ -893,7 +893,8 @@ static int f2fs_write_check_point_pack(void)
>  	/* cp page (2), data summaries (1), node summaries (3) */
>  	set_cp(cp_pack_total_block_count, 6 + get_sb(cp_payload));
>  	flags = CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG;
> -	if (get_cp(cp_pack_total_block_count) <=
> +	if (!(c.disabled_feature & F2FS_FEATURE_NAT_BITS) &&
> +			get_cp(cp_pack_total_block_count) <=
>  			(1 << get_sb(log_blocks_per_seg)) - nat_bits_blocks)
>  		flags |= CP_NAT_BITS_FLAG;
>  
> diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c
> index 9407f5b..5b4569d 100644
> --- a/mkfs/f2fs_format_main.c
> +++ b/mkfs/f2fs_format_main.c
> @@ -143,6 +143,7 @@ static void add_default_options(void)
>  		force_overwrite = 1;
>  		c.wanted_sector_size = F2FS_BLKSIZE;
>  		c.root_uid = c.root_gid = 0;
> +		c.disabled_feature |= F2FS_FEATURE_NAT_BITS;
>  
>  		/* RO doesn't need any other features */
>  		if (c.feature & F2FS_FEATURE_RO)
> -- 
> 2.48.1
diff mbox series

Patch

diff --git a/fsck/mount.c b/fsck/mount.c
index a189ba7..2f4c631 100644
--- a/fsck/mount.c
+++ b/fsck/mount.c
@@ -1708,7 +1708,8 @@  u32 update_nat_bits_flags(struct f2fs_super_block *sb,
 	nat_bits_bytes = get_sb(segment_count_nat) << 5;
 	nat_bits_blocks = F2FS_BYTES_TO_BLK((nat_bits_bytes << 1) + 8 +
 						F2FS_BLKSIZE - 1);
-	if (get_cp(cp_pack_total_block_count) <=
+	if (!(c.disabled_feature & F2FS_FEATURE_NAT_BITS) &&
+			get_cp(cp_pack_total_block_count) <=
 			(1 << get_sb(log_blocks_per_seg)) - nat_bits_blocks)
 		flags |= CP_NAT_BITS_FLAG;
 	else
diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
index 0cb9228..bb40adc 100644
--- a/include/f2fs_fs.h
+++ b/include/f2fs_fs.h
@@ -1471,6 +1471,11 @@  enum {
 
 #define MAX_CACHE_SUMS			8
 
+/* feature list in Android */
+enum {
+	F2FS_FEATURE_NAT_BITS = 0x0001,
+};
+
 struct f2fs_configuration {
 	uint32_t conf_reserved_sections;
 	uint32_t reserved_segments;
@@ -1537,6 +1542,7 @@  struct f2fs_configuration {
 	int large_nat_bitmap;
 	int fix_chksum;			/* fix old cp.chksum position */
 	unsigned int feature;			/* defined features */
+	unsigned int disabled_feature;	/* disabled feature, used for Android only */
 	unsigned int quota_bits;	/* quota bits */
 	time_t fixed_time;
 	int roll_forward;
diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c
index 6635eed..c28ebb0 100644
--- a/mkfs/f2fs_format.c
+++ b/mkfs/f2fs_format.c
@@ -893,7 +893,8 @@  static int f2fs_write_check_point_pack(void)
 	/* cp page (2), data summaries (1), node summaries (3) */
 	set_cp(cp_pack_total_block_count, 6 + get_sb(cp_payload));
 	flags = CP_UMOUNT_FLAG | CP_COMPACT_SUM_FLAG;
-	if (get_cp(cp_pack_total_block_count) <=
+	if (!(c.disabled_feature & F2FS_FEATURE_NAT_BITS) &&
+			get_cp(cp_pack_total_block_count) <=
 			(1 << get_sb(log_blocks_per_seg)) - nat_bits_blocks)
 		flags |= CP_NAT_BITS_FLAG;
 
diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c
index 9407f5b..5b4569d 100644
--- a/mkfs/f2fs_format_main.c
+++ b/mkfs/f2fs_format_main.c
@@ -143,6 +143,7 @@  static void add_default_options(void)
 		force_overwrite = 1;
 		c.wanted_sector_size = F2FS_BLKSIZE;
 		c.root_uid = c.root_gid = 0;
+		c.disabled_feature |= F2FS_FEATURE_NAT_BITS;
 
 		/* RO doesn't need any other features */
 		if (c.feature & F2FS_FEATURE_RO)