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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/