diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index c9ac43f40746..3babc07ae613 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -3603,6 +3603,10 @@ ext4_mb_normalize_request(struct ext4_allocation_context *ac, start = max(start, rounddown(ac->ac_o_ex.fe_logical, (ext4_lblk_t)EXT4_BLOCKS_PER_GROUP(ac->ac_sb))); + /* avoid unnecessary preallocation that may trigger assertions */ + if (start + size > EXT_MAX_BLOCKS) + size = EXT_MAX_BLOCKS - start; + /* don't cover already allocated blocks in selected range */ if (ar->pleft && start <= ar->lleft) { size -= ar->lleft + 1 - start;