On Mon 18-12-23 22:18:14, Baokun Li wrote: > When bb_free is not 0 but bb_fragments is 0, return directly to avoid > system crash due to division by zero. How could this possibly happen? bb_fragments is the number of free space extents and bb_free is the number of free blocks. No free space extents => no free blocks seems pretty obvious? You can see the logic in ext4_mb_generate_buddy()... Honza > > Fixes: 83e80a6e3543 ("ext4: use buckets for cr 1 block scan instead of rbtree") > CC: stable@xxxxxxxxxxxxxxx > Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx> > --- > fs/ext4/mballoc.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c > index 2fbee0f0f5c3..e2a167240335 100644 > --- a/fs/ext4/mballoc.c > +++ b/fs/ext4/mballoc.c > @@ -845,6 +845,9 @@ mb_update_avg_fragment_size(struct super_block *sb, struct ext4_group_info *grp) > if (!test_opt2(sb, MB_OPTIMIZE_SCAN) || grp->bb_free == 0) > return; > > + if (unlikely(grp->bb_fragments == 0)) > + return; > + > new_order = mb_avg_fragment_size_order(sb, > grp->bb_free / grp->bb_fragments); > if (new_order == grp->bb_avg_fragment_size_order) > -- > 2.31.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR