On Fri, Sep 18, 2015 at 03:38:35PM +0900, Joonsoo Kim wrote: > > > And, there is some mismatch that check atomic high-order allocation. > > > In some place, you checked __GFP_ATOMIC, but some other places, > > > you checked ALLOC_HARDER. It is better to use unified one. > > > Introducing helper function may be a good choice. > > > > > > > Which cases specifically? In the zone_watermark check, it's because > > there is no GFP flags in that context. They could be passed in but then > > every caller needs to be updated accordingly and overall it gains > > nothing. > > You use __GFP_ATOMIC in rmqueue() to allow highatomic reserve. > ALLOC_HARDER is used in watermark check and to reserve highatomic > pageblock after allocation. > > ALLOC_HARDER is set if (__GFP_ATOMIC && !__GFP_NOMEMALLOC) *or* > (rt_task && !in_interrupt()). So, later case could pass watermark > check but cannot use HIGHATOMIC reserve. And, it will reserve > highatomic pageblock. When it try to allocate again, it can't use > this reserved pageblock due to GFP flags and this could happens > repeatedly. > And, first case also has a problem. If user requests memory > with __GFP_NOMEMALLOC, it's intend doesn't touch reserved mem, > but, in current patch, it can use highatomic pageblock. > > I'm not sure these causes real trouble but unifying it as much as > possible is preferable solution. > Ok, that makes sense. Thanks -- Mel Gorman SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>