Message ID | 20190423120806.3503-2-aryabinin@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] mm/page_alloc: avoid potential NULL pointer dereference | expand |
On Tue, Apr 23, 2019 at 03:08:06PM +0300, Andrey Ryabinin wrote: > Commit 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") > removed setting of the ALLOC_NOFRAGMENT flag. Bring it back. > > Fixes: 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") > Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Acked-by: Mel Gorman <mgorman@techsingularity.net>
On Tue, 23 Apr 2019 15:08:06 +0300 Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > Commit 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") > removed setting of the ALLOC_NOFRAGMENT flag. Bring it back. What are the runtime effects of this fix?
On Tue, Apr 23, 2019 at 12:01:43PM -0700, Andrew Morton wrote: > On Tue, 23 Apr 2019 15:08:06 +0300 Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > > > Commit 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") > > removed setting of the ALLOC_NOFRAGMENT flag. Bring it back. > > What are the runtime effects of this fix? The runtime effect is that ALLOC_NOFRAGMENT behaviour is restored so that allocations are spread across local zones to avoid fragmentation due to mixing pageblocks as long as possible.
On Wed, 24 Apr 2019 10:04:03 +0100 Mel Gorman <mgorman@techsingularity.net> wrote: > On Tue, Apr 23, 2019 at 12:01:43PM -0700, Andrew Morton wrote: > > On Tue, 23 Apr 2019 15:08:06 +0300 Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > > > > > Commit 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") > > > removed setting of the ALLOC_NOFRAGMENT flag. Bring it back. > > > > What are the runtime effects of this fix? > > The runtime effect is that ALLOC_NOFRAGMENT behaviour is restored so > that allocations are spread across local zones to avoid fragmentation > due to mixing pageblocks as long as possible. OK, thanks. Is this worth a -stable backport?
On Wed, Apr 24, 2019 at 03:46:24PM -0700, Andrew Morton wrote: > On Wed, 24 Apr 2019 10:04:03 +0100 Mel Gorman <mgorman@techsingularity.net> wrote: > > > On Tue, Apr 23, 2019 at 12:01:43PM -0700, Andrew Morton wrote: > > > On Tue, 23 Apr 2019 15:08:06 +0300 Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > > > > > > > Commit 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") > > > > removed setting of the ALLOC_NOFRAGMENT flag. Bring it back. > > > > > > What are the runtime effects of this fix? > > > > The runtime effect is that ALLOC_NOFRAGMENT behaviour is restored so > > that allocations are spread across local zones to avoid fragmentation > > due to mixing pageblocks as long as possible. > > OK, thanks. Is this worth a -stable backport? Yes, but only for 5.0 obviously and both should be included if that is the case. I did not push for it initially as problems in this area are hard for a general user to detect and people have not complained about 5.0's fragmentation handling.
On Thu, 25 Apr 2019 00:40:53 +0100 Mel Gorman <mgorman@techsingularity.net> wrote: > On Wed, Apr 24, 2019 at 03:46:24PM -0700, Andrew Morton wrote: > > On Wed, 24 Apr 2019 10:04:03 +0100 Mel Gorman <mgorman@techsingularity.net> wrote: > > > > > On Tue, Apr 23, 2019 at 12:01:43PM -0700, Andrew Morton wrote: > > > > On Tue, 23 Apr 2019 15:08:06 +0300 Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > > > > > > > > > Commit 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") > > > > > removed setting of the ALLOC_NOFRAGMENT flag. Bring it back. > > > > > > > > What are the runtime effects of this fix? > > > > > > The runtime effect is that ALLOC_NOFRAGMENT behaviour is restored so > > > that allocations are spread across local zones to avoid fragmentation > > > due to mixing pageblocks as long as possible. > > > > OK, thanks. Is this worth a -stable backport? > > Yes, but only for 5.0 obviously and both should be included if that is > the case. I did not push for it initially as problems in this area are > hard for a general user to detect and people have not complained about > 5.0's fragmentation handling. Ah, OK. 0a79cdad5eb2 didn't have a -stable tag so I suppose we can leave this patch un-stabled. If they went and backported 0a79cdad5eb2 anyway, let's hope the scripts are smart enough to catch this patch's Fixes: link.
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2b2c7065102f..a85b8252c5ad 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3465,7 +3465,7 @@ alloc_flags_nofragment(struct zone *zone, gfp_t gfp_mask) return alloc_flags; if (zone_idx(zone) != ZONE_NORMAL) - goto out; + return alloc_flags; /* * If ZONE_DMA32 exists, assume it is the one after ZONE_NORMAL and @@ -3474,9 +3474,9 @@ alloc_flags_nofragment(struct zone *zone, gfp_t gfp_mask) */ BUILD_BUG_ON(ZONE_NORMAL - ZONE_DMA32 != 1); if (nr_online_nodes > 1 && !populated_zone(--zone)) - goto out; + return alloc_flags; -out: + alloc_flags |= ALLOC_NOFRAGMENT; #endif /* CONFIG_ZONE_DMA32 */ return alloc_flags; }
Commit 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") removed setting of the ALLOC_NOFRAGMENT flag. Bring it back. Fixes: 0a79cdad5eb2 ("mm: use alloc_flags to record if kswapd can wake") Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> --- mm/page_alloc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)