From: Michal Hocko <mhocko@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Guenter Roeck <linux@roeck-us.net>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Christoph Lameter <cl@linux.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
linux-mm@kvack.org, Dave Chinner <david@fromorbit.com>
Subject: Re: linux-next: kernel BUG at mm/slub.c:1447!
Date: Fri, 2 Oct 2015 09:25:23 +0200 [thread overview]
Message-ID: <20151002072522.GC30354@dhcp22.suse.cz> (raw)
In-Reply-To: <20151001134904.127ccc7bea14e969fbfba0d5@linux-foundation.org>
On Thu 01-10-15 13:49:04, Andrew Morton wrote:
[...]
> mpage_readpage() is getting the __GFP_HIGHMEM from mapping_gfp_mask()
> and that got passed all the way into kmem_cache_alloc() to allocate a
> bio. slab goes BUG if asked for highmem.
>
> A fix would be to mask off __GFP_HIGHMEM right there in
> mpage_readpage().
Yes, this is an obvious bug in the patch. It should only make the gfp
mask more restrictive.
> But I think the patch needs a bit of a rethink. mapping_gfp_mask() is
> the mask for allocating a file's pagecache. It isn't designed for
> allocation of memory for IO structures, file metadata, etc.
>
> Now, we could redefine mapping_gfp_mask()'s purpose (or formalize
> stuff which has been sneaking in anyway). Treat mapping_gfp_mask() as
> a constraint mask - instead of it being "use this gfp for this
> mapping", it becomes "don't use these gfp flags for this mapping".
>
> Hence something like:
>
> gfp_t mapping_gfp_constraint(struct address_space *mapping, gfp_t gfp_in)
> {
> return mapping_gfp_mask(mapping) & gfp_in;
> }
>
> So instead of doing this:
>
> @@ -370,12 +371,13 @@ mpage_readpages(struct address_space *ma
> prefetchw(&page->flags);
> list_del(&page->lru);
> if (!add_to_page_cache_lru(page, mapping,
> - page->index, GFP_KERNEL)) {
> + page->index,
> + gfp)) {
>
> Michal's patch will do:
>
> @@ -370,12 +371,13 @@ mpage_readpages(struct address_space *ma
> prefetchw(&page->flags);
> list_del(&page->lru);
> if (!add_to_page_cache_lru(page, mapping,
> - page->index, GFP_KERNEL)) {
> + page->index,
> + mapping_gfp_constraint(mapping, GFP_KERNEL))) {
>
> ie: use mapping_gfp_mask() to strip out any GFP flags which the
> filesystem doesn't want used. If the filesystem has *added* flags to
> mapping_gfp_mask() then obviously this won't work and we'll need two
> fields in the address_space or something.
>
> Meanwhile I'll drop "mm, fs: obey gfp_mapping for add_to_page_cache()",
> thanks for the report.
mapping_gfp_mask is used at many places so I think it would be better to
fix this particular place (others seem to be correct). It would make the
stable backport much easier. We can build a more sane API on top. What
do you think?
Here is the respin of the original patch. I will post another one which
will add mapping_gfp_constraint on top. It will surely be less error
prone.
---
next prev parent reply other threads:[~2015-10-02 7:25 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <560D59F7.4070002@roeck-us.net>
2015-10-01 20:49 ` linux-next: kernel BUG at mm/slub.c:1447! Andrew Morton
2015-10-02 7:25 ` Michal Hocko [this message]
2015-10-02 8:53 ` Michal Hocko
2015-10-02 20:49 ` Andrew Morton
2015-10-05 13:47 ` Michal Hocko
2015-10-05 19:29 ` Andrew Morton
2015-10-06 2:12 ` Andrew Morton
2015-10-06 5:12 ` Dave Chinner
2015-10-02 13:36 ` Guenter Roeck
2015-10-02 13:42 ` Michal Hocko
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=20151002072522.GC30354@dhcp22.suse.cz \
--to=mhocko@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=david@fromorbit.com \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux@roeck-us.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).