| From 10b01ee92df52c8d7200afead4d5e5f55a5c58b1 Mon Sep 17 00:00:00 2001 |
| From: Theodore Ts'o <tytso@mit.edu> |
| Date: Thu, 14 Apr 2022 21:31:27 -0400 |
| Subject: ext4: fix overhead calculation to account for the reserved gdt blocks |
| |
| From: Theodore Ts'o <tytso@mit.edu> |
| |
| commit 10b01ee92df52c8d7200afead4d5e5f55a5c58b1 upstream. |
| |
| The kernel calculation was underestimating the overhead by not taking |
| into account the reserved gdt blocks. With this change, the overhead |
| calculated by the kernel matches the overhead calculation in mke2fs. |
| |
| Signed-off-by: Theodore Ts'o <tytso@mit.edu> |
| Cc: stable@kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/ext4/super.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/fs/ext4/super.c |
| +++ b/fs/ext4/super.c |
| @@ -3485,9 +3485,11 @@ static int count_overhead(struct super_b |
| ext4_fsblk_t first_block, last_block, b; |
| ext4_group_t i, ngroups = ext4_get_groups_count(sb); |
| int s, j, count = 0; |
| + int has_super = ext4_bg_has_super(sb, grp); |
| |
| if (!ext4_has_feature_bigalloc(sb)) |
| - return (ext4_bg_has_super(sb, grp) + ext4_bg_num_gdb(sb, grp) + |
| + return (has_super + ext4_bg_num_gdb(sb, grp) + |
| + (has_super ? le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) : 0) + |
| sbi->s_itb_per_group + 2); |
| |
| first_block = le32_to_cpu(sbi->s_es->s_first_data_block) + |