mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-06 14:31:46 +00:00
ext4: avoid resizing to a partial cluster size
[ Upstream commit 69cb8e9d8c
]
This patch avoids an attempt to resize the filesystem to an
unaligned cluster boundary. An online resize to a size that is not
integral to cluster size results in the last iteration attempting to
grow the fs by a negative amount, which trips a BUG_ON and leaves the fs
with a corrupted in-memory superblock.
Signed-off-by: Oleg Kiselev <okiselev@amazon.com>
Link: https://lore.kernel.org/r/0E92A0AB-4F16-4F1A-94B7-702CC6504FDE@amazon.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a5643607bd
commit
02b6963510
1 changed files with 10 additions and 0 deletions
|
@ -1977,6 +1977,16 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
|
||||||
}
|
}
|
||||||
brelse(bh);
|
brelse(bh);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For bigalloc, trim the requested size to the nearest cluster
|
||||||
|
* boundary to avoid creating an unusable filesystem. We do this
|
||||||
|
* silently, instead of returning an error, to avoid breaking
|
||||||
|
* callers that blindly resize the filesystem to the full size of
|
||||||
|
* the underlying block device.
|
||||||
|
*/
|
||||||
|
if (ext4_has_feature_bigalloc(sb))
|
||||||
|
n_blocks_count &= ~((1 << EXT4_CLUSTER_BITS(sb)) - 1);
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
o_blocks_count = ext4_blocks_count(es);
|
o_blocks_count = ext4_blocks_count(es);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue