All of lore.kernel.org
 help / color / mirror / Atom feed
* vmalloc with GFP_NOFS
@ 2018-04-24 16:27 ` Michal Hocko
  0 siblings, 0 replies; 127+ messages in thread
From: Michal Hocko @ 2018-04-24 16:27 UTC (permalink / raw)
  To: LKML
  Cc: Artem Bityutskiy, Richard Weinberger, David Woodhouse,
	Brian Norris, Boris Brezillon, Marek Vasut, Cyrille Pitchen,
	Theodore Ts'o, Andreas Dilger, Steven Whitehouse,
	Bob Peterson, Trond Myklebust, Anna Schumaker, Adrian Hunter,
	Philippe Ombredanne, Kate Stewart, Mikulas Patocka, linux-mtd,
	linux-kernel, linux-ext4, cluster-devel, linux-nfs, linux-mm

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).

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!
-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 127+ messages in thread

end of thread, other threads:[~2018-07-17 12:51 UTC | newest]

Thread overview: 127+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-24 16:27 vmalloc with GFP_NOFS Michal Hocko
2018-04-24 16:27 ` [Cluster-devel] " Michal Hocko
2018-04-24 16:27 ` Michal Hocko
2018-04-24 16:27 ` Michal Hocko
2018-04-24 16:46 ` Mikulas Patocka
2018-04-24 16:46   ` [Cluster-devel] " Mikulas Patocka
2018-04-24 16:46   ` Mikulas Patocka
2018-04-24 16:55   ` Michal Hocko
2018-04-24 16:55     ` [Cluster-devel] " Michal Hocko
2018-04-24 16:55     ` Michal Hocko
2018-04-24 17:05     ` Mikulas Patocka
2018-04-24 17:05       ` [Cluster-devel] " Mikulas Patocka
2018-04-24 17:05       ` Mikulas Patocka
2018-04-24 18:35 ` Theodore Y. Ts'o
2018-04-24 18:35   ` [Cluster-devel] " Theodore Y. Ts'o
2018-04-24 18:35   ` Theodore Y. Ts'o
2018-04-24 19:25   ` Michal Hocko
2018-04-24 19:25     ` [Cluster-devel] " Michal Hocko
2018-04-24 19:25     ` Michal Hocko
2018-05-09 13:42     ` Michal Hocko
2018-05-09 13:42       ` [Cluster-devel] " Michal Hocko
2018-05-09 13:42       ` Michal Hocko
2018-05-09 14:13       ` David Sterba
2018-05-09 14:13         ` [Cluster-devel] " David Sterba
2018-05-09 14:13         ` David Sterba
2018-05-09 15:13       ` Darrick J. Wong
2018-05-09 15:13         ` [Cluster-devel] " Darrick J. Wong
2018-05-09 15:13         ` Darrick J. Wong
2018-05-09 16:24         ` Mike Rapoport
2018-05-09 16:24           ` [Cluster-devel] " Mike Rapoport
2018-05-09 16:24           ` Mike Rapoport
2018-05-09 21:06           ` Michal Hocko
2018-05-09 21:06             ` [Cluster-devel] " Michal Hocko
2018-05-09 21:06             ` Michal Hocko
2018-05-09 21:04         ` Michal Hocko
2018-05-09 21:04           ` [Cluster-devel] " Michal Hocko
2018-05-09 21:04           ` Michal Hocko
2018-05-09 22:02           ` Darrick J. Wong
2018-05-09 22:02             ` [Cluster-devel] " Darrick J. Wong
2018-05-09 22:02             ` Darrick J. Wong
2018-05-10  5:58             ` Michal Hocko
2018-05-10  5:58               ` [Cluster-devel] " Michal Hocko
2018-05-10  5:58               ` Michal Hocko
2018-05-10  7:18               ` Michal Hocko
2018-05-10  7:18                 ` [Cluster-devel] " Michal Hocko
2018-05-10  7:18                 ` Michal Hocko
2018-05-24 11:43   ` [PATCH] doc: document scope NOFS, NOIO APIs Michal Hocko
2018-05-24 11:43     ` Michal Hocko
2018-05-24 14:33     ` Shakeel Butt
2018-05-24 14:47       ` Michal Hocko
2018-05-24 16:37     ` Randy Dunlap
2018-05-25  7:52       ` Michal Hocko
2018-05-28  7:21         ` Nikolay Borisov
2018-05-29  8:22           ` Michal Hocko
2018-05-28 11:32         ` Vlastimil Babka
2018-05-24 20:52     ` Jonathan Corbet
2018-05-24 20:52       ` Jonathan Corbet
2018-05-25  8:11       ` Michal Hocko
2018-05-24 22:17     ` Dave Chinner
2018-05-24 23:25       ` Theodore Y. Ts'o
2018-05-25  8:16       ` Michal Hocko
2018-05-27 12:47         ` Mike Rapoport
2018-05-28  9:21           ` Michal Hocko
2018-05-28 16:10             ` Randy Dunlap
2018-05-29  8:21               ` Michal Hocko
2018-05-27 23:48         ` Dave Chinner
2018-05-28  9:19           ` Michal Hocko
2018-05-28 22:32             ` Dave Chinner
2018-05-29  8:18               ` Michal Hocko
2018-05-29  8:26     ` [PATCH v2] " Michal Hocko
2018-05-29  8:26       ` Michal Hocko
2018-05-29 10:22       ` Dave Chinner
2018-05-29 11:50       ` Mike Rapoport
2018-05-29 11:51       ` Jonathan Corbet
2018-05-29 11:51         ` Jonathan Corbet
2018-05-29 12:37         ` Michal Hocko
2018-07-17 12:49   ` vmalloc with GFP_NOFS Michal Hocko
2018-07-17 12:49     ` [Cluster-devel] " Michal Hocko
2018-07-17 12:49     ` Michal Hocko
2018-04-24 19:03 ` Richard Weinberger
2018-04-24 19:03   ` [Cluster-devel] " Richard Weinberger
2018-04-24 19:03   ` Richard Weinberger
2018-04-24 19:28   ` Michal Hocko
2018-04-24 19:28     ` [Cluster-devel] " Michal Hocko
2018-04-24 19:28     ` Michal Hocko
2018-04-24 22:18     ` Richard Weinberger
2018-04-24 22:18       ` [Cluster-devel] " Richard Weinberger
2018-04-24 22:18       ` Richard Weinberger
2018-04-24 23:09       ` Michal Hocko
2018-04-24 23:09         ` [Cluster-devel] " Michal Hocko
2018-04-24 23:09         ` Michal Hocko
2018-04-24 23:17         ` Mikulas Patocka
2018-04-24 23:17           ` [Cluster-devel] " Mikulas Patocka
2018-04-24 23:17           ` Mikulas Patocka
2018-04-24 23:25           ` Michal Hocko
2018-04-24 23:25             ` [Cluster-devel] " Michal Hocko
2018-04-24 23:25             ` Michal Hocko
2018-04-25 12:43             ` Mikulas Patocka
2018-04-25 12:43               ` [Cluster-devel] " Mikulas Patocka
2018-04-25 12:43               ` Mikulas Patocka
2018-04-25 14:45               ` Michal Hocko
2018-04-25 14:45                 ` [Cluster-devel] " Michal Hocko
2018-04-25 14:45                 ` Michal Hocko
2018-04-25 15:25                 ` Mikulas Patocka
2018-04-25 15:25                   ` [Cluster-devel] " Mikulas Patocka
2018-04-25 15:25                   ` Mikulas Patocka
2018-04-25 16:56                   ` Michal Hocko
2018-04-25 16:56                     ` [Cluster-devel] " Michal Hocko
2018-04-25 16:56                     ` Michal Hocko
2018-07-17 12:47   ` Michal Hocko
2018-07-17 12:47     ` [Cluster-devel] " Michal Hocko
2018-07-17 12:47     ` Michal Hocko
2018-04-24 19:05 ` Richard Weinberger
2018-04-24 19:05   ` [Cluster-devel] " Richard Weinberger
2018-04-24 19:05   ` Richard Weinberger
2018-04-24 19:10 ` Richard Weinberger
2018-04-24 19:10   ` [Cluster-devel] " Richard Weinberger
2018-04-24 19:10   ` Richard Weinberger
2018-04-24 19:26 ` Steven Whitehouse
2018-04-24 19:26   ` [Cluster-devel] " Steven Whitehouse
2018-04-24 19:26   ` Steven Whitehouse
2018-04-24 20:09   ` Michal Hocko
2018-04-24 20:09     ` [Cluster-devel] " Michal Hocko
2018-04-24 20:09     ` Michal Hocko
2018-07-17 12:50     ` Michal Hocko
2018-07-17 12:50       ` [Cluster-devel] " Michal Hocko
2018-07-17 12:50       ` Michal Hocko

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.