public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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.

  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