From: Andrew Morton <akpm@linux-foundation.org>
To: David Rientjes <rientjes@google.com>
Cc: mel@csn.ul.ie, a.p.zijlstra@chello.nl, npiggin@suse.de,
cl@linux-foundation.org, dave@linux.vnet.ibm.com,
linux-kernel@vger.kernel.org, Divy Le Ray <divy@chelsio.com>,
Jens Axboe <jens.axboe@oracle.com>
Subject: Re: [patch -mmotm] mm: invoke oom killer for __GFP_NOFAIL
Date: Mon, 11 May 2009 13:40:38 -0700 [thread overview]
Message-ID: <20090511134038.5cf1ad3b.akpm@linux-foundation.org> (raw)
In-Reply-To: <alpine.DEB.2.00.0905091544470.6884@chino.kir.corp.google.com>
On Sat, 9 May 2009 15:46:39 -0700 (PDT)
David Rientjes <rientjes@google.com> wrote:
> The oom killer must be invoked regardless of the order if the allocation
> is __GFP_NOFAIL, otherwise it will loop forever when reclaim fails to
> free some memory.
Sigh. We're supposed to be deleting __GFP_NOFAIL. I added it as a way
of easily finding lame error-handling-challenged callers which need to
be fixed up. So of course we went and added lots more callers.
y:/usr/src/linux-2.6.30-rc5> grep -rl GFP_NOFAIL .
./arch/x86/xen/mmu.c
./arch/sparc/kernel/mdesc.c
./mm/page_alloc.c
./mm/failslab.c
./block/cfq-iosched.c
./fs/bio-integrity.c
./fs/ntfs/ChangeLog
./fs/ntfs/malloc.h
./fs/reiserfs/journal.c
./fs/gfs2/meta_io.c
./fs/gfs2/rgrp.c
./fs/gfs2/dir.c
./fs/gfs2/log.c
./fs/jbd/transaction.c
./fs/jbd/journal.c
./fs/jbd2/transaction.c
./fs/jbd2/journal.c
./drivers/net/cxgb3/cxgb3_main.c
./drivers/net/cxgb3/cxgb3_offload.c
./include/linux/slab.h
./include/linux/gfp.h
JBD (and hence JBD2) are the original sinners.
That net driver should be taught to just handle the allocation failure,
please.
It's super-uber-bad to be using __GFP_NOFAIL in an IO scheduler! But maybe
that's just a brainfart:
/*
* Inform the allocator of the fact that we will
* just repeat this allocation if it fails, to allow
* the allocator to do whatever it needs to attempt to
* free memory.
*/
If "we will just repeat this allocation" means what it says then we
should use __GFP_NORETRY here, then retry the allocation if it failed.
But a) this risks getting stuck in a hot loop in CFQ and b) we really
really don't want to be looping infinitely for memory relcaim down in
the guts of the block layer!
>From my reading, this function is called from get_request_wait(), via
rq = get_request(q, rw_flags, bio, GFP_NOIO);
so we can't even do pageout here.
Jens, this all looks quite risky.
next prev parent reply other threads:[~2009-05-11 20:45 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-09 22:46 [patch -mmotm] mm: invoke oom killer for __GFP_NOFAIL David Rientjes
2009-05-10 23:42 ` Rik van Riel
2009-05-11 7:29 ` Minchan Kim
2009-05-11 8:40 ` David Rientjes
2009-05-11 9:12 ` Minchan Kim
2009-05-11 11:21 ` Minchan Kim
2009-05-11 13:38 ` Mel Gorman
2009-05-11 14:00 ` Minchan Kim
2009-05-11 19:32 ` David Rientjes
2009-05-11 23:48 ` Minchan Kim
2009-05-11 21:32 ` Mel Gorman
2009-05-11 23:41 ` Minchan Kim
2009-05-11 10:40 ` Mel Gorman
2009-05-11 19:37 ` David Rientjes
2009-05-11 20:40 ` Andrew Morton [this message]
2009-05-12 12:42 ` Jens Axboe
2009-05-12 13:05 ` Nick Piggin
2009-05-12 16:37 ` Jens Axboe
2009-05-12 16:49 ` Nick Piggin
2009-05-12 17:35 ` Jens Axboe
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=20090511134038.5cf1ad3b.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=a.p.zijlstra@chello.nl \
--cc=cl@linux-foundation.org \
--cc=dave@linux.vnet.ibm.com \
--cc=divy@chelsio.com \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mel@csn.ul.ie \
--cc=npiggin@suse.de \
--cc=rientjes@google.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox