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.
Unified · Split
| @@ -1306,9 +1306,9 @@ static inline void bdi_dirty_limits(struct backing_dev_info *bdi, · 1305 unmodified lines | ||
| 1306 | 1306 | *bdi_thresh = bdi_dirty_limit(bdi, dirty_thresh); |
| 1307 | 1307 | |
| 1308 | 1308 | 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; | |
| 1312 | 1312 | |
| 1313 | 1313 | /* |
| 1314 | 1314 | * In order to avoid the stacked BDI deadlock we need |