forked from pool/e2fsprogs
47 lines
1.8 KiB
Diff
47 lines
1.8 KiB
Diff
|
From 1c580154d4e1ae3b4f13cf58a85f8a5ae792fbfc Mon Sep 17 00:00:00 2001
|
||
|
From: Jan Kara <jack@suse.cz>
|
||
|
Date: Fri, 18 Oct 2019 14:41:10 +0200
|
||
|
Subject: [PATCH] resize2fs: Make minimum size estimates more reliable for
|
||
|
mounted fs
|
||
|
References: bsc#1154295
|
||
|
|
||
|
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 <jack@suse.cz>
|
||
|
Acked-by: Jan Kara <jack@suse.cz>
|
||
|
---
|
||
|
resize/resize2fs.c | 8 ++++----
|
||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/resize/resize2fs.c b/resize/resize2fs.c
|
||
|
index c2e10471bfd1..8a3d08db19f3 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);
|
||
|
--
|
||
|
2.16.4
|
||
|
|