On Tue, 11 Jan 2011 13:03:22 -0800 (PST) Hugh Dickins <hughd@xxxxxxxxxx> wrote: > On Tue, 11 Jan 2011, Andrew Morton wrote: > > On Tue, 11 Jan 2011 11:45:21 +0000 > > Mel Gorman <mel@xxxxxxxxx> wrote: > > > > > --- a/mm/page_alloc.c > > > +++ b/mm/page_alloc.c > > > @@ -1809,12 +1809,15 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, > > > bool sync_migration) > > > { > > > struct page *page; > > > + struct task_struct *p = current; > > > > > > if (!order || compaction_deferred(preferred_zone)) > > > return NULL; > > > > > > + p->flags |= PF_MEMALLOC; > > > *did_some_progress = try_to_compact_pages(zonelist, order, gfp_mask, > > > nodemask, sync_migration); > > > + p->flags &= ~PF_MEMALLOC; > > > > Thus accidentally wiping out PF_MEMALLOC if it was already set. > > > > It's risky, and general bad practice. The default operation here > > should be to push the old value and to later restore it. > > > > If it is safe to micro-optimise that operation then we need to make > > sure that it's really really safe and that there is no risk of > > accidentally breaking things later on as code evolves. > > > > One way of doing that would be to add a WARN_ON(p->flags & PF_MEMALLOC) > > on entry. > > True. Though one of the nice things about Mel's patch is that it is > precisely copying in __alloc_pages_direct_compact what is already > done in __alloc_pages_direct_reclaim (both being called from > __alloc_pages_slowpath after it checked for PF_MEMALLOC). mutter. > > > > Oh, and since when did we use `p' to identify task_structs? > > Tsk, tsk: we've been using `p' for task_structs for years and years! Only bad people do that. "p". Really? z:/usr/src/linux-2.6.37> grep -r " \*p;" . | wc -l 2329 z:/usr/src/linux-2.6.37> grep -r "task_struct \*p" . | wc -l 824 bah. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>