Messages in this thread |  | | Date | Wed, 9 Jan 2013 21:29:07 +0000 | From | Eric Wong <> | Subject | Re: ppoll() stuck on POLLIN while TCP peer is sending |
| |
Mel Gorman <mgorman@suse.de> wrote: > When I looked at it for long enough I found a number of problems. Most > affect timing but two serious issues are in there. One affects how long > kswapd spends compacting versus reclaiming and the other increases lock > contention meaning that async compaction can abort early. Both are serious > and could explain why a driver would fail high-order allocations. > > Please try the following patch. However, even if it works the benefit of > capture may be so marginal that partially reverting it and simplifying > compaction.c is the better decision.
Btw, I'm still testing this patch with the "page->pfemalloc = false" change on top of it.
> diff --git a/mm/compaction.c b/mm/compaction.c > index 6b807e4..03c82c0 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -857,7 +857,8 @@ static int compact_finished(struct zone *zone, > } else { > unsigned int order; > for (order = cc->order; order < MAX_ORDER; order++) { > - struct free_area *area = &zone->free_area[cc->order]; > + struct free_area *area = &zone->free_area[order];
I noticed something like this hunk wasn't in your latest partial revert (<20130109135010.GB13475@suse.de>) I admit I don't understand this code, but this jumped out at me.
|  |