From: Steven Whitehouse <swhiteho@redhat.com>
To: Michal Hocko <mhocko@kernel.org>, LKML <linux-kernel@vger.kernel.org>
Cc: Artem Bityutskiy <dedekind1@gmail.com>,
Richard Weinberger <richard@nod.at>,
David Woodhouse <dwmw2@infradead.org>,
Brian Norris <computersforpeace@gmail.com>,
Boris Brezillon <boris.brezillon@free-electrons.com>,
Marek Vasut <marek.vasut@gmail.com>,
Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>,
Theodore Ts'o <tytso@mit.edu>,
Andreas Dilger <adilger.kernel@dilger.ca>,
Bob Peterson <rpeterso@redhat.com>,
Trond Myklebust <trond.myklebust@primarydata.com>,
Anna Schumaker <anna.schumaker@netapp.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Philippe Ombredanne <pombredanne@nexb.com>,
Kate Stewart <kstewart@linuxfoundation.org>,
Mikulas Patocka <mpatocka@redhat.com>,
linux-mtd@lists.infradead.org, linux-ext4@vger.kernel.org,
cluster-devel@redhat.com, linux-nfs@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: vmalloc with GFP_NOFS
Date: Tue, 24 Apr 2018 20:26:23 +0100 [thread overview]
Message-ID: <ce42f323-870c-21df-ac27-1bec6aa7e5d1@redhat.com> (raw)
In-Reply-To: <20180424162712.GL17484@dhcp22.suse.cz>
Hi,
On 24/04/18 17:27, Michal Hocko wrote:
> Hi,
> it seems that we still have few vmalloc users who perform GFP_NOFS
> allocation:
> drivers/mtd/ubi/io.c
> fs/ext4/xattr.c
> fs/gfs2/dir.c
> fs/gfs2/quota.c
> fs/nfs/blocklayout/extent_tree.c
> fs/ubifs/debug.c
> fs/ubifs/lprops.c
> fs/ubifs/lpt_commit.c
> fs/ubifs/orphan.c
>
> Unfortunatelly vmalloc doesn't suppoer GFP_NOFS semantinc properly
> because we do have hardocded GFP_KERNEL allocations deep inside the
> vmalloc layers. That means that if GFP_NOFS really protects from
> recursion into the fs deadlocks then the vmalloc call is broken.
>
> What to do about this? Well, there are two things. Firstly, it would be
> really great to double check whether the GFP_NOFS is really needed. I
> cannot judge that because I am not familiar with the code. It would be
> great if the respective maintainers (hopefully get_maintainer.sh pointed
> me to all relevant ones). If there is not reclaim recursion issue then
> simply use the standard vmalloc (aka GFP_KERNEL request).
For GFS2, and I suspect for other fs too, it is really needed. We don't
want to enter reclaim while holding filesystem locks.
> If the use is really valid then we have a way to do the vmalloc
> allocation properly. We have memalloc_nofs_{save,restore} scope api. How
> does that work? You simply call memalloc_nofs_save when the reclaim
> recursion critical section starts (e.g. when you take a lock which is
> then used in the reclaim path - e.g. shrinker) and memalloc_nofs_restore
> when the critical section ends. _All_ allocations within that scope
> will get GFP_NOFS semantic automagically. If you are not sure about the
> scope itself then the easiest workaround is to wrap the vmalloc itself
> with a big fat comment that this should be revisited.
>
> Does that sound like something that can be done in a reasonable time?
> I have tried to bring this up in the past but our speed is glacial and
> there are attempts to do hacks like checking for abusers inside the
> vmalloc which is just too ugly to live.
>
> Please do not hesitate to get back to me if something is not clear.
>
> Thanks!
It would be good to fix this, and it has been known as an issue for a
long time. We might well be able to make use of the new API though. It
might be as simple as adding the calls when we get & release glocks, but
I'd have to check the code to be sure,
Steve.
next prev parent reply other threads:[~2018-04-24 19:26 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-24 16:27 vmalloc with GFP_NOFS Michal Hocko
2018-04-24 16:46 ` Mikulas Patocka
2018-04-24 16:55 ` Michal Hocko
2018-04-24 17:05 ` Mikulas Patocka
2018-04-24 18:35 ` Theodore Y. Ts'o
2018-04-24 19:25 ` Michal Hocko
2018-05-09 13:42 ` Michal Hocko
2018-05-09 14:13 ` David Sterba
2018-05-09 15:13 ` Darrick J. Wong
2018-05-09 16:24 ` Mike Rapoport
2018-05-09 21:06 ` Michal Hocko
2018-05-09 21:04 ` Michal Hocko
2018-05-09 22:02 ` Darrick J. Wong
2018-05-10 5:58 ` Michal Hocko
2018-05-10 7:18 ` Michal Hocko
2018-07-17 12:49 ` Michal Hocko
2018-04-24 19:10 ` Richard Weinberger
2018-04-24 19:26 ` Steven Whitehouse [this message]
2018-04-24 20:09 ` Michal Hocko
2018-07-17 12:50 ` Michal Hocko
[not found] ` <3732370.1623zxSvNg@blindfold>
2018-04-24 19:28 ` Michal Hocko
2018-04-24 22:18 ` Richard Weinberger
2018-04-24 23:09 ` Michal Hocko
2018-04-24 23:17 ` Mikulas Patocka
2018-04-24 23:25 ` Michal Hocko
2018-04-25 12:43 ` Mikulas Patocka
2018-04-25 14:45 ` Michal Hocko
2018-04-25 15:25 ` Mikulas Patocka
2018-04-25 16:56 ` Michal Hocko
2018-07-17 12:47 ` 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=ce42f323-870c-21df-ac27-1bec6aa7e5d1@redhat.com \
--to=swhiteho@redhat.com \
--cc=adilger.kernel@dilger.ca \
--cc=adrian.hunter@intel.com \
--cc=anna.schumaker@netapp.com \
--cc=boris.brezillon@free-electrons.com \
--cc=cluster-devel@redhat.com \
--cc=computersforpeace@gmail.com \
--cc=cyrille.pitchen@wedev4u.fr \
--cc=dedekind1@gmail.com \
--cc=dwmw2@infradead.org \
--cc=kstewart@linuxfoundation.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-nfs@vger.kernel.org \
--cc=marek.vasut@gmail.com \
--cc=mhocko@kernel.org \
--cc=mpatocka@redhat.com \
--cc=pombredanne@nexb.com \
--cc=richard@nod.at \
--cc=rpeterso@redhat.com \
--cc=trond.myklebust@primarydata.com \
--cc=tytso@mit.edu \
/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).