2024-03-06 07:55:15

by Srivathsa Dara

[permalink] [raw]
Subject: [PATCH v2] ext4: Enable meta_bg only when new desc blocks are needed

This patch addresses an issue observed when resize_inode is disabled
and an online extension of a filesysyem is performed. When a filesystem
is expanded to a size that does not require a addition of a new
descriptor block, the meta_bg feature is being enabled even though no
part of the filesystem uses this layout.

This patch ensures that the meta_bg feature is only enabled if
any of the added block groups utilize meta_bg layout.

Signed-off-by: Srivathsa Dara <[email protected]>
---
fs/ext4/resize.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
index 928700d57eb6..b46a1c492c3f 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -1996,7 +1996,8 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
}
}

- if ((!resize_inode && !meta_bg) || n_blocks_count == o_blocks_count) {
+ if ((!resize_inode && !meta_bg && n_desc_blocks > o_desc_blocks) ||
+ n_blocks_count == o_blocks_count) {
err = ext4_convert_meta_bg(sb, resize_inode);
if (err)
goto out;
--
2.39.3



2024-03-07 09:23:48

by Ritesh Harjani

[permalink] [raw]
Subject: Re: [PATCH v2] ext4: Enable meta_bg only when new desc blocks are needed

Srivathsa Dara <[email protected]> writes:

> This patch addresses an issue observed when resize_inode is disabled
> and an online extension of a filesysyem is performed. When a filesystem
> is expanded to a size that does not require a addition of a new
> descriptor block, the meta_bg feature is being enabled even though no
> part of the filesystem uses this layout.
>
> This patch ensures that the meta_bg feature is only enabled if
> any of the added block groups utilize meta_bg layout.
>

Makes sense to me. Please feel free to add -

Reviewed-by: Ritesh Harjani (IBM) <[email protected]>

> Signed-off-by: Srivathsa Dara <[email protected]>
> ---
> fs/ext4/resize.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
> index 928700d57eb6..b46a1c492c3f 100644
> --- a/fs/ext4/resize.c
> +++ b/fs/ext4/resize.c
> @@ -1996,7 +1996,8 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
> }
> }
>
> - if ((!resize_inode && !meta_bg) || n_blocks_count == o_blocks_count) {
> + if ((!resize_inode && !meta_bg && n_desc_blocks > o_desc_blocks) ||
> + n_blocks_count == o_blocks_count) {
> err = ext4_convert_meta_bg(sb, resize_inode);
> if (err)
> goto out;
> --
> 2.39.3