All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: linux-mm@kvack.org, linux-fsdevel@vger.kernel.org
Subject: Re: Removing GFP_NOFS
Date: Fri, 9 Mar 2018 12:35:35 +1100	[thread overview]
Message-ID: <20180309013535.GU7000@dastard> (raw)
In-Reply-To: <20180308234618.GE29073@bombadil.infradead.org>

On Thu, Mar 08, 2018 at 03:46:18PM -0800, Matthew Wilcox wrote:
> 
> Do we have a strategy for eliminating GFP_NOFS?
> 
> As I understand it, our intent is to mark the areas in individual
> filesystems that can't be reentered with memalloc_nofs_save()/restore()
> pairs.  Once they're all done, then we can replace all the GFP_NOFS
> users with GFP_KERNEL.

Won't be that easy, I think.  We recently came across user-reported
allocation deadlocks in XFS where we were doing allocation with
pages held in the writeback state that lockdep has never triggered
on.

https://www.spinics.net/lists/linux-xfs/msg16154.html

IOWs, GFP_NOFS isn't a solid guide to where
memalloc_nofs_save/restore need to cover in the filesystems because
there's a surprising amount of code that isn't covered by existing
lockdep annotations to warning us about un-intended recursion
problems.

I think we need to start with some documentation of all the generic
rules for where these will need to be set, then the per-filesystem
rules can be added on top of that...

> How will we know when we're done and can kill GFP_NOFS?  I was thinking
> that we could put a warning in slab/page_alloc that fires when __GFP_IO
> is set, __GFP_FS is clear and PF_MEMALLOC_NOFS is clear.  That would
> catch every place that uses GFP_NOFS without using memalloc_nofs_save().
> 
> Unfortunately (and this is sort of the point), there's a lot of places
> which use GFP_NOFS as a precaution; that is, they can be called from
> places which both are and aren't in a nofs path.  So we'd have to pass
> in GFP flags.  Which would be a lot of stupid churn.

Yup, GFP_NOFS has been used as a "go away, lockdep, your drunk" flag
for handling false positives for quite a long time because some
calls are already under memalloc_nofs_save/restore protection paths.
THese would need to be converted to GFP_NOLOCKDEP instead of
memalloc_nofs_save/restore() which they are already covered by in
the cases taht matter...

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

  reply	other threads:[~2018-03-09  1:35 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-08 23:46 Removing GFP_NOFS Matthew Wilcox
2018-03-09  1:35 ` Dave Chinner [this message]
2018-03-09  4:06   ` Dave Chinner
2018-03-09 11:14     ` Tetsuo Handa
2018-03-09 11:14       ` Tetsuo Handa
2018-03-09 14:48     ` Goldwyn Rodrigues
2018-03-09 22:38       ` Dave Chinner
2018-03-10  2:44         ` Tetsuo Handa

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=20180309013535.GU7000@dastard \
    --to=david@fromorbit.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=willy@infradead.org \
    /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.