From: Andrew Morton <akpm@linux-foundation.org>
To: David Rientjes <rientjes@google.com>
Cc: Neil Brown <neilb@suse.de>, Alasdair G Kergon <agk@redhat.com>,
linux-raid@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 1/6] md: remove dependency on __GFP_NOFAIL
Date: Mon, 23 Aug 2010 12:51:00 -0700 [thread overview]
Message-ID: <20100823125100.75a9de56.akpm@linux-foundation.org> (raw)
In-Reply-To: <alpine.DEB.2.00.1008231229410.14622@chino.kir.corp.google.com>
On Mon, 23 Aug 2010 12:35:22 -0700 (PDT)
David Rientjes <rientjes@google.com> wrote:
> On Mon, 23 Aug 2010, Andrew Morton wrote:
>
> > > diff --git a/drivers/md/dm-region-hash.c b/drivers/md/dm-region-hash.c
> > > --- a/drivers/md/dm-region-hash.c
> > > +++ b/drivers/md/dm-region-hash.c
> > > @@ -289,8 +289,12 @@ static struct dm_region *__rh_alloc(struct dm_region_hash *rh, region_t region)
> > > struct dm_region *reg, *nreg;
> > >
> > > nreg = mempool_alloc(rh->region_pool, GFP_ATOMIC);
> > > - if (unlikely(!nreg))
> > > - nreg = kmalloc(sizeof(*nreg), GFP_NOIO | __GFP_NOFAIL);
> > > + if (unlikely(!nreg)) {
> > > + /* FIXME: this may potentially loop forever */
> > > + do {
> > > + nreg = kmalloc(sizeof(*nreg), GFP_NOIO);
> > > + } while (!nreg);
> > > + }
> > >
> > > nreg->state = rh->log->type->in_sync(rh->log, region, 1) ?
> > > DM_RH_CLEAN : DM_RH_NOSYNC;
> >
> > erm.
> >
> > The reason for adding GFP_NOFAIL in the first place was my observation
> > that the kernel contained lots of open-coded retry-for-ever loops.
> >
> > All of these are wrong, bad, buggy and mustfix. So we consolidated the
> > wrongbadbuggymustfix concept into the core MM so that miscreants could
> > be easily identified and hopefully fixed.
> >
>
> That consolidation would have been unnecessary, then, since all
> allocations with order < PAGE_ALLOC_COSTLY_ORDER automatically loop
> indefinitely in the page allocator.
The difference is that an order-0 !__GFP_NOFAIL allocation attempt can
fail due to oom-killing. Unless someone broke that.
> struct dm_region allocations would
> already do that.
>
> So this retry loop doesn't actually do anything that the page allocator
> already doesn't, with or without __GFP_NOFAIL. The difference here is
> that
>
> - it doesn't depend on the page allocator's implementation, which may
> change over time, and
>
> - it adds documentation so that the subsystems doing these loops can
> (hopefully) fix these problems later, although their appear to be
> geniune cases where little other options are available.
>
> > I think that simply undoing that change is a bad idea - it allows the
> > wrongbadbuggymustfix code to hide from view.
> >
>
> It removes several branches from the page allocator.
None on the fast path.
> > The correct way to remove __GFP_NOFAIL is to fix the
> > wrongbadbuggymustfix code properly.
> >
>
> If the prerequisite for removing __GFP_NOFAIL is that nobody must ever
> loop indefinitely looking for memory or smaller order allocations don't
> implicitly retry, then there's little chance it'll ever get removed since
> they've existed for years without anybody cleaning them up.
The JBD one is hard - I haven't looked at the others.
We should fix them.
next prev parent reply other threads:[~2010-08-23 19:51 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-17 2:57 [patch 0/6] remove dependency on __GFP_NOFAIL David Rientjes
2010-08-17 2:57 ` [patch 1/6] md: " David Rientjes
2010-08-23 19:26 ` Andrew Morton
2010-08-23 19:35 ` David Rientjes
2010-08-23 19:51 ` Andrew Morton [this message]
2010-08-23 20:03 ` David Rientjes
2010-08-23 20:01 ` Andrew Morton
2010-08-23 20:08 ` David Rientjes
2010-08-23 20:23 ` Andrew Morton
2010-08-23 20:37 ` David Rientjes
2010-08-23 20:09 ` Pekka Enberg
2010-08-23 20:09 ` Pekka Enberg
2010-08-23 20:13 ` David Rientjes
2010-08-23 20:29 ` Pekka Enberg
2010-08-23 20:40 ` David Rientjes
2010-08-17 2:57 ` [patch 2/6] btrfs: " David Rientjes
2010-08-17 2:57 ` [patch 3/6] gfs2: " David Rientjes
2010-08-17 2:58 ` [patch 4/6] jbd: " David Rientjes
2010-08-17 9:51 ` Jan Kara
2010-08-17 17:48 ` David Rientjes
2010-08-23 19:28 ` Andrew Morton
2010-08-23 22:03 ` Jan Kara
2010-08-23 22:11 ` Andrew Morton
2010-08-23 22:21 ` Jan Kara
2010-08-23 22:22 ` David Rientjes
2010-08-17 2:58 ` [patch 5/6] ntfs: " David Rientjes
2010-08-17 2:58 ` [patch 6/6] reiserfs: " David Rientjes
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=20100823125100.75a9de56.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=agk@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-raid@vger.kernel.org \
--cc=neilb@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 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.