History

mm/page-writeback.c: fix divide by zero in bdi_dirty_limits()

Under memory pressure, it is possible for dirty_thresh, calculated by global_dirty_limits() in balance_dirty_pages(), to equal zero. Then, if strictlimit is true, bdi_dirty_limits() tries to resolve the proportion: bdi_bg_thresh : bdi_thresh = background_thresh : dirty_thresh by dividing by zero.

Maxim Patlasov committed 12 years ago

Commit f6789591 parent 26bcd8b1 file · +3 −3Browse files

Unified · Split

mm/page-writeback.c+3−3
@@ -1306,9 +1306,9 @@ static inline void bdi_dirty_limits(struct backing_dev_info *bdi, · 1305 unmodified lines
13061306 *bdi_thresh = bdi_dirty_limit(bdi, dirty_thresh);
13071307
13081308 if (bdi_bg_thresh)
1309− *bdi_bg_thresh = div_u64((u64)*bdi_thresh *
1310− background_thresh,
1311− dirty_thresh);
1309+ *bdi_bg_thresh = dirty_thresh ? div_u64((u64)*bdi_thresh *
1310+ background_thresh,
1311+ dirty_thresh) : 0;
13121312
13131313 /*
13141314 * In order to avoid the stacked BDI deadlock we need