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 |
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 --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)
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(-)