2024-02-27 13:22:01

by Srivathsa Dara

[permalink] [raw]
Subject: [PATCH] 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 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
index 928700d57eb6..99b52f26e818 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -1996,7 +1996,7 @@ 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-06 04:02:40

by Ritesh Harjani

[permalink] [raw]
Subject: Re: [PATCH] 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

Other than "meta_bg unwatedly getting enabled when not required", is
there any other issue you observed?

> 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.

Make sense to me.

>
> Signed-off-by: Srivathsa Dara <[email protected]>
> ---
> fs/ext4/resize.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
> index 928700d57eb6..99b52f26e818 100644
> --- a/fs/ext4/resize.c
> +++ b/fs/ext4/resize.c
> @@ -1996,7 +1996,7 @@ 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) {

Beyond 80 chars line. You might want to fix that.

-ritesh

> err = ext4_convert_meta_bg(sb, resize_inode);
> if (err)
> goto out;
> --
> 2.39.3

2024-03-06 06:56:15

by Srivathsa Dara

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

Hi Ritesh,

> -----Original Message-----
> From: Ritesh Harjani <[email protected]>
> Sent: Wednesday, March 6, 2024 9:32 AM
> To: Srivathsa Dara <[email protected]>; [email protected]
> Cc: [email protected]; [email protected]; Rajesh Sivaramasubramaniom <[email protected]>; Junxiao Bi <[email protected]>
> Subject: Re: [PATCH] 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
>
> Other than "meta_bg unwatedly getting enabled when not required", is there any other issue you observed?

Yes, we have seen an issue where a data block is being corrupted by group
descriptor block because of this. The following patch fixes that issue.

ext4: fix corruption during on-line resize
commit: 3a944549dd26ccaf1f898a4be952e75a42bf37dd

>
> > 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.
>
> Make sense to me.
>
> >
> > Signed-off-by: Srivathsa Dara <[email protected]>
> > ---
> > fs/ext4/resize.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index
> > 928700d57eb6..99b52f26e818 100644
> > --- a/fs/ext4/resize.c
> > +++ b/fs/ext4/resize.c
> > @@ -1996,7 +1996,7 @@ 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) {
>
> Beyond 80 chars line. You might want to fix that.

Sorry, I missed that, will send a V2.

>
> -ritesh
>
> > err = ext4_convert_meta_bg(sb, resize_inode);
> > if (err)
> > goto out;
> > --
> > 2.39.3

Thanks,
Srivathsa Dara

2024-03-14 03:57:45

by Theodore Ts'o

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


On Tue, 27 Feb 2024 13:13:29 +0000, Srivathsa Dara wrote:
> 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.
>
> [...]

Applied, thanks!

[1/1] ext4: Enable meta_bg only when new desc blocks are needed
commit: 07be778c70149321f785611a9c50125b904b0508

Best regards,
--
Theodore Ts'o <[email protected]>