Re: [PATCH] vm-fix-all_zones_ok (was Re: 2.6.3-mm3)

Andrew Morton
2004-02-23T08:59:08Z

Nick Piggin <piggin@cyberone.com.au> wrote:
>
>
>
> Nick Piggin wrote:
>
> >
> > Humph. OK you're right.
>
>
> Aha but you've broken something!

I'm a microsoft spy.

> Tell me I'm still useful.

You're still useful.

> diff -puN mm/vmscan.c~vm-fix-all_zones_ok mm/vmscan.c
> --- linux-2.6/mm/vmscan.c~vm-fix-all_zones_ok 2004-02-23 19:44:06.000000000 +1100
> +++ linux-2.6-npiggin/mm/vmscan.c 2004-02-23 19:45:10.000000000 +1100
> @@ -1008,10 +1008,12 @@ static int balance_pgdat(pg_data_t *pgda
>
> if (nr_pages) /* Software suspend */
> to_reclaim = min(to_free, SWAP_CLUSTER_MAX*8);
> - else /* Zone balancing */
> + else { /* Zone balancing */
> to_reclaim = zone->reclaim_batch;
> + if (zone->pages_high < zone->free_pages)
> + all_zones_ok = 0;
> + }

I wouldna spotted that in a million years. That all_zones_ok code was a
bitch to test and really needs retesting.

We used to have <= in there actually:

to_reclaim = zone->pages_high-zone->free_pages;
if (to_reclaim <= 0)
continue;

We've never clearly defined whether pages_high == free_pages means the zone
is under limits. According to __alloc_pages() it means that the zone is
not under limits, so you've fixed two bugs there.