- If we only reclaim nr_pages then its okay to stay on node. Switch from > to >= for the comparison. - vm_table[] entry for zone_reclaim_mode is a bit screwed up. - Add empty lines around shrink_zone to show that this is the central function to be called.
Unified · Split
| @@ -878,7 +878,8 @@ static ctl_table vm_table[] = { · 877 unmodified lines | ||
| 878 | 878 | .maxlen = sizeof(zone_reclaim_mode), |
| 879 | 879 | .mode = 0644, |
| 880 | 880 | .proc_handler = &proc_dointvec, |
| 881 | − .strategy = &zero, | |
| 881 | + .strategy = &sysctl_intvec, | |
| 882 | + .extra1 = &zero, | |
| 882 | 883 | }, |
| 883 | 884 | #endif |
| 884 | 885 | { .ctl_name = 0 } |
| @@ -1636,14 +1636,16 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) · 1635 unmodified lines | ||
| 1636 | 1636 | p->flags |= PF_MEMALLOC; |
| 1637 | 1637 | reclaim_state.reclaimed_slab = 0; |
| 1638 | 1638 | p->reclaim_state = &reclaim_state; |
| 1639 | + | |
| 1639 | 1640 | shrink_zone(zone, &sc); |
| 1641 | + | |
| 1640 | 1642 | p->reclaim_state = NULL; |
| 1641 | 1643 | current->flags &= ~PF_MEMALLOC; |
| 1642 | 1644 | |
| 1643 | 1645 | if (sc.nr_reclaimed == 0) |
| 1644 | 1646 | zone->last_unsuccessful_zone_reclaim = jiffies; |
| 1645 | 1647 | |
| 1646 | − return sc.nr_reclaimed > nr_pages; | |
| 1648 | + return sc.nr_reclaimed >= nr_pages; | |
| 1647 | 1649 | } |
| 1648 | 1650 | #endif |
| 1649 | 1651 | |