From ac94445fc01f070feb31d599d6dfd5fb3d34d3ea Mon Sep 17 00:00:00 2001 From: Jan Kara Date: Fri, 18 Oct 2019 14:50:59 +0200 Subject: [PATCH] resize2fs: make minimum size estimates more reliable for mounted fs Currently, the estimate of minimum filesystem size is using free blocks counter in the superblock. The counter generally doesn't get updated while the filesystem is mounted and thus the estimate is very unreliable for a mounted filesystem. For some usecases such as automated partitioning proposal to the user it is desirable that the estimate of minimum filesystem size is reasonably accurate even for a mounted filesystem. So use group descriptor counters of free blocks for the estimate of minimum filesystem size. These get updated together with block being allocated and so the resulting estimate is more accurate. Signed-off-by: Jan Kara Signed-off-by: Theodore Ts'o --- resize/resize2fs.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resize/resize2fs.c b/resize/resize2fs.c index c2e1047..8a3d08d 100644 --- a/resize/resize2fs.c +++ b/resize/resize2fs.c @@ -2926,11 +2926,11 @@ blk64_t calculate_minimum_resize_size(ext2_filsys fs, int flags) fs->super->s_reserved_gdt_blocks; /* calculate how many blocks are needed for data */ - data_needed = ext2fs_blocks_count(fs->super) - - ext2fs_free_blocks_count(fs->super); - - for (grp = 0; grp < fs->group_desc_count; grp++) + data_needed = ext2fs_blocks_count(fs->super); + for (grp = 0; grp < fs->group_desc_count; grp++) { data_needed -= calc_group_overhead(fs, grp, old_desc_blocks); + data_needed -= ext2fs_bg_free_blocks_count(fs, grp); + } #ifdef RESIZE2FS_DEBUG if (flags & RESIZE_DEBUG_MIN_CALC) printf("fs requires %llu data blocks.\n", data_needed); -- 1.8.3.1