From: "Kirill A. Shutemov" <kirill@shutemov.name>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Christoph Lameter <cl@linux.com>,
Ming Lei <ming.lei@canonical.com>,
Pekka Enberg <penberg@kernel.org>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
David Rientjes <rientjes@google.com>, Mel Gorman <mel@csn.ul.ie>,
Johannes Weiner <hannes@cmpxchg.org>,
Pauli Nieminen <suokkos@gmail.com>,
Dave Airlie <airlied@linux.ie>,
Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
bugzilla-daemon@bugzilla.kernel.org,
luke-jr+linuxbugs@utopios.org, dri-devel@lists.freedesktop.org,
linux-mm@kvack.org
Subject: Re: [Bug 87891] New: kernel BUG at mm/slab.c:2625!
Date: Wed, 12 Nov 2014 04:07:03 +0200 [thread overview]
Message-ID: <20141112020703.GC17446@node.dhcp.inet.fi> (raw)
In-Reply-To: <20141111175603.ede86030.akpm@linux-foundation.org>
On Tue, Nov 11, 2014 at 05:56:03PM -0800, Andrew Morton wrote:
> On Wed, 12 Nov 2014 03:47:03 +0200 "Kirill A. Shutemov" <kirill@shutemov.name> wrote:
>
> > On Wed, Nov 12, 2014 at 03:22:41AM +0200, Kirill A. Shutemov wrote:
> > > On Tue, Nov 11, 2014 at 04:49:13PM -0800, Andrew Morton wrote:
> > > > On Tue, 11 Nov 2014 18:36:28 -0600 (CST) Christoph Lameter <cl@linux.com> wrote:
> > > >
> > > > > On Tue, 11 Nov 2014, Andrew Morton wrote:
> > > > >
> > > > > > There's no point in doing
> > > > > >
> > > > > > #define GFP_SLAB_BUG_MASK (__GFP_DMA32|__GFP_HIGHMEM|~__GFP_BITS_MASK)
> > > > > >
> > > > > > because __GFP_DMA32|__GFP_HIGHMEM are already part of ~__GFP_BITS_MASK.
> > > > >
> > > > > ?? ~__GFP_BITS_MASK means bits 25 to 31 are set.
> > > > >
> > > > > __GFP_DMA32 is bit 2 and __GFP_HIGHMEM is bit 1.
> > > >
> > > > Ah, yes, OK.
> > > >
> > > > I suppose it's possible that __GFP_HIGHMEM was set.
> > > >
> > > > do_huge_pmd_anonymous_page
> > > > ->pte_alloc_one
> > > > ->alloc_pages(__userpte_alloc_gfp==__GFP_HIGHMEM)
> > >
> > > do_huge_pmd_anonymous_page
> > > alloc_hugepage_vma
> > > alloc_pages_vma(GFP_TRANSHUGE)
> > >
> > > GFP_TRANSHUGE contains GFP_HIGHUSER_MOVABLE, which has __GFP_HIGHMEM.
> >
> > Looks like it's reasonable to sanitize flags in shrink_slab() by dropping
> > flags incompatible with slab expectation. Like this:
> >
> > diff --git a/mm/vmscan.c b/mm/vmscan.c
> > index dcb47074ae03..eb165d29c5e5 100644
> > --- a/mm/vmscan.c
> > +++ b/mm/vmscan.c
> > @@ -369,6 +369,8 @@ unsigned long shrink_slab(struct shrink_control *shrinkctl,
> > if (nr_pages_scanned == 0)
> > nr_pages_scanned = SWAP_CLUSTER_MAX;
> >
> > + shrinkctl->gfp_mask &= ~(__GFP_DMA32 | __GFP_HIGHMEM);
> > +
> > if (!down_read_trylock(&shrinker_rwsem)) {
> > /*
> > * If we would return 0, our callers would understand that we
>
> Well no, because nobody is supposed to be passing this gfp_mask back
> into a new allocation attempt anyway. It would be better to do
>
> shrinkctl->gfp_mask |= __GFP_IMMEDIATELY_GO_BUG;
>
> ?
>From my POV, the problem is that we combine what-need-to-be-freed gfp_mask
with if-have-to-allocate gfp_mask: we want to respect __GFP_IO/FS on
alloc, but not nessesary both if there's no restriction from the context.
For shrink_slab(), __GFP_DMA32 and __GFP_HIGHMEM don't make sense in both
cases.
__GFP_IMMEDIATELY_GO_BUG would work too, but we also need to provide
macros to construct alloc-suitable mask from the given one for
yes-i-really-have-to-allocate case.
--
Kirill A. Shutemov
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2014-11-12 2:07 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <bug-87891-27@https.bugzilla.kernel.org/>
2014-11-11 23:31 ` [Bug 87891] New: kernel BUG at mm/slab.c:2625! Andrew Morton
2014-11-11 23:31 ` Andrew Morton
2014-11-12 0:36 ` Christoph Lameter
2014-11-12 0:49 ` Andrew Morton
2014-11-12 0:54 ` Luke Dashjr
2014-11-12 1:02 ` Andrew Morton
2014-11-12 1:22 ` Joonsoo Kim
2014-11-12 1:44 ` Andrew Morton
2014-11-12 1:44 ` Andrew Morton
2014-11-12 2:13 ` Joonsoo Kim
2014-11-12 4:08 ` Tetsuo Handa
2014-11-12 4:38 ` Andrew Morton
2014-11-12 4:38 ` Andrew Morton
2014-11-13 13:43 ` [PATCH] drm/ttm: Avoid memory allocation from shrinker functions Tetsuo Handa
2014-11-12 1:22 ` [Bug 87891] New: kernel BUG at mm/slab.c:2625! Kirill A. Shutemov
2014-11-12 1:47 ` Kirill A. Shutemov
2014-11-12 1:56 ` Andrew Morton
2014-11-12 1:56 ` Andrew Morton
2014-11-12 2:07 ` Kirill A. Shutemov [this message]
2014-11-12 2:17 ` Joonsoo Kim
2014-11-12 2:37 ` Kirill A. Shutemov
2014-11-12 8:21 ` Joonsoo Kim
2014-11-12 10:39 ` Mel Gorman
2014-11-13 6:37 ` Joonsoo Kim
2014-11-12 0:44 ` Joonsoo Kim
2014-11-12 0:53 ` Andrew Morton
2014-11-12 0:53 ` Andrew Morton
2014-11-12 1:04 ` Christoph Lameter
2014-11-13 7:04 ` Vlastimil Babka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141112020703.GC17446@node.dhcp.inet.fi \
--to=kirill@shutemov.name \
--cc=airlied@linux.ie \
--cc=akpm@linux-foundation.org \
--cc=bugzilla-daemon@bugzilla.kernel.org \
--cc=cl@linux.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hannes@cmpxchg.org \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-mm@kvack.org \
--cc=luke-jr+linuxbugs@utopios.org \
--cc=mel@csn.ul.ie \
--cc=ming.lei@canonical.com \
--cc=penberg@kernel.org \
--cc=penguin-kernel@I-love.SAKURA.ne.jp \
--cc=rientjes@google.com \
--cc=suokkos@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.