diff mbox series

[2/2] ext4: Add correct group descriptors and reserved GDT blocks to system zone

Message ID tencent_D744D1450CC169AEA77FCF0A64719909ED05@qq.com
State Awaiting Upstream
Headers show
Series [1/2] ext4: Ractor one helper ext4_num_base_meta_blocks | expand

Commit Message

Wang Jianjian Aug. 2, 2023, 4:28 p.m. UTC
When setup_system_zone, flex_bg is not initialzied so it is always 1.
ext4_num_base_meta_blocks() returns the meta blocks in this group
including reserved GDT blocks, so let's use this helper.

Signed-off-by: Wang Jianjian <wangjianjian0@foxmail.com>
---
 fs/ext4/block_validity.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Comments

Wang Jianjian Aug. 16, 2023, 3:27 p.m. UTC | #1
Hi all,
Any comments?

On 8/3/23 00:28, Wang Jianjian wrote:
> When setup_system_zone, flex_bg is not initialzied so it is always 1.
> ext4_num_base_meta_blocks() returns the meta blocks in this group
> including reserved GDT blocks, so let's use this helper.
> 
> Signed-off-by: Wang Jianjian <wangjianjian0@foxmail.com>
> ---
>   fs/ext4/block_validity.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c
> index 5504f72bbbbe..558e487a0b53 100644
> --- a/fs/ext4/block_validity.c
> +++ b/fs/ext4/block_validity.c
> @@ -215,7 +215,6 @@ int ext4_setup_system_zone(struct super_block *sb)
>   	struct ext4_system_blocks *system_blks;
>   	struct ext4_group_desc *gdp;
>   	ext4_group_t i;
> -	int flex_size = ext4_flex_bg_size(sbi);
>   	int ret;
>   
>   	system_blks = kzalloc(sizeof(*system_blks), GFP_KERNEL);
> @@ -224,11 +223,11 @@ int ext4_setup_system_zone(struct super_block *sb)
>   
>   	for (i=0; i < ngroups; i++) {
>   		cond_resched();
> -		if (ext4_bg_has_super(sb, i) &&
> -		    ((i < 5) || ((i % flex_size) == 0))) {
> +		unsigned int meta_blks = ext4_num_base_meta_blocks(sb, i);
> +		if (meta_blks != 0) {
>   			ret = add_system_zone(system_blks,
>   					ext4_group_first_block_no(sb, i),
> -					ext4_bg_num_gdb(sb, i) + 1, 0);
> +					meta_blks, 0);
>   			if (ret)
>   				goto err;
>   		}
>
Theodore Ts'o Aug. 17, 2023, 5:05 p.m. UTC | #2
On Thu, Aug 03, 2023 at 12:28:40AM +0800, Wang Jianjian wrote:
> When setup_system_zone, flex_bg is not initialzied so it is always 1.
> ext4_num_base_meta_blocks() returns the meta blocks in this group
> including reserved GDT blocks, so let's use this helper.
> 
> Signed-off-by: Wang Jianjian <wangjianjian0@foxmail.com>

Thanks for the patch.  I ended up collapsing the two patches into a
single one, and then fixed up some checkpatch errors.

       	    	     	      	   - Ted
Luis Henriques (SUSE) April 1, 2024, 2:23 p.m. UTC | #3
"Theodore Ts'o" <tytso@mit.edu> writes:

> On Thu, Aug 03, 2023 at 12:28:40AM +0800, Wang Jianjian wrote:
>> When setup_system_zone, flex_bg is not initialzied so it is always 1.
>> ext4_num_base_meta_blocks() returns the meta blocks in this group
>> including reserved GDT blocks, so let's use this helper.
>> 
>> Signed-off-by: Wang Jianjian <wangjianjian0@foxmail.com>
>
> Thanks for the patch.  I ended up collapsing the two patches into a
> single one, and then fixed up some checkpatch errors.

Sorry for revisiting this old thread, but it looks like these patches
(commit 68228da51c9a "ext4: add correct group descriptors and reserved GDT
blocks to system zone") broke fstest ext4/059.

A (very!) quick look seems to show that it's related with the very fact
that sbi->s_es->s_reserved_gdt_blocks are now taken into account to
compute the number of blocks (which is the point of the patch, of course).
Maybe the test needs to be fixed, as it messes up with the GDT reserved
blocks...?

Cheers,
wangjianjian (C) April 7, 2024, 10:13 a.m. UTC | #4
Hi,
Let me test it and fix it if it fails.

Regards,
Luis Henriques (SUSE) April 10, 2024, 8:36 a.m. UTC | #5
On Sun 07 Apr 2024 06:13:20 PM +08, wangjianjian (C) wrote;

> Hi,
> Let me test it and fix it if it fails.

Thank you for looking into this.  I'll also see if I can find out more
details on this.

Cheers,
diff mbox series

Patch

diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c
index 5504f72bbbbe..558e487a0b53 100644
--- a/fs/ext4/block_validity.c
+++ b/fs/ext4/block_validity.c
@@ -215,7 +215,6 @@  int ext4_setup_system_zone(struct super_block *sb)
 	struct ext4_system_blocks *system_blks;
 	struct ext4_group_desc *gdp;
 	ext4_group_t i;
-	int flex_size = ext4_flex_bg_size(sbi);
 	int ret;
 
 	system_blks = kzalloc(sizeof(*system_blks), GFP_KERNEL);
@@ -224,11 +223,11 @@  int ext4_setup_system_zone(struct super_block *sb)
 
 	for (i=0; i < ngroups; i++) {
 		cond_resched();
-		if (ext4_bg_has_super(sb, i) &&
-		    ((i < 5) || ((i % flex_size) == 0))) {
+		unsigned int meta_blks = ext4_num_base_meta_blocks(sb, i);
+		if (meta_blks != 0) {
 			ret = add_system_zone(system_blks,
 					ext4_group_first_block_no(sb, i),
-					ext4_bg_num_gdb(sb, i) + 1, 0);
+					meta_blks, 0);
 			if (ret)
 				goto err;
 		}