Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1543781

[PATCH 5/9 v2] xfs: use memalloc_nofs_{save,restore} instead of memalloc_noio*

From Michal Hocko <mhocko@kernel.org>
Newsgroups linux.kernel
Subject [PATCH 5/9 v2] xfs: use memalloc_nofs_{save,restore} instead of memalloc_noio*
Date 2016-12-16 23:10 +0100
Message-ID <sP8Rs-Yj-41@gated-at.bofh.it> (permalink)
References <sOETn-6HQ-5@gated-at.bofh.it> <sOETn-6HQ-9@gated-at.bofh.it> <sP3I6-65D-19@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On Fri 16-12-16 11:38:11, Brian Foster wrote:
> On Thu, Dec 15, 2016 at 03:07:11PM +0100, Michal Hocko wrote:
[...]
> > @@ -459,7 +459,7 @@ _xfs_buf_map_pages(
> >  				break;
> >  			vm_unmap_aliases();
> >  		} while (retried++ <= 1);
> > -		memalloc_noio_restore(noio_flag);
> > +		memalloc_noio_restore(nofs_flag);
> 
> memalloc_nofs_restore() ?

Ups, you are right of course. Fixed.
---
From 47826112e59014030ffe27a673c1b1de345dd9de Mon Sep 17 00:00:00 2001
From: Michal Hocko <mhocko@suse.com>
Date: Thu, 15 Dec 2016 13:10:53 +0100
Subject: [PATCH] xfs: use memalloc_nofs_{save,restore} instead of
 memalloc_noio*

kmem_zalloc_large and _xfs_buf_map_pages use memalloc_noio_{save,restore}
API to prevent from reclaim recursion into the fs because vmalloc can
invoke unconditional GFP_KERNEL allocations and these functions might be
called from the NOFS contexts. The memalloc_noio_save will enforce
GFP_NOIO context which is even weaker than GFP_NOFS and that seems to be
unnecessary. Let's use memalloc_nofs_{save,restore} instead as it should
provide exactly what we need here - implicit GFP_NOFS context.

Changes since v1
- s@memalloc_noio_restore@memalloc_nofs_restore@ in _xfs_buf_map_pages
  as per Brian Foster

Signed-off-by: Michal Hocko <mhocko@suse.com>
---
 fs/xfs/kmem.c    | 10 +++++-----
 fs/xfs/xfs_buf.c |  8 ++++----
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/fs/xfs/kmem.c b/fs/xfs/kmem.c
index a76a05dae96b..d69ed5e76621 100644
--- a/fs/xfs/kmem.c
+++ b/fs/xfs/kmem.c
@@ -65,7 +65,7 @@ kmem_alloc(size_t size, xfs_km_flags_t flags)
 void *
 kmem_zalloc_large(size_t size, xfs_km_flags_t flags)
 {
-	unsigned noio_flag = 0;
+	unsigned nofs_flag = 0;
 	void	*ptr;
 	gfp_t	lflags;
 
@@ -80,14 +80,14 @@ kmem_zalloc_large(size_t size, xfs_km_flags_t flags)
 	 * context via PF_MEMALLOC_NOIO to prevent memory reclaim re-entering
 	 * the filesystem here and potentially deadlocking.
 	 */
-	if ((current->flags & PF_MEMALLOC_NOFS) || (flags & KM_NOFS))
-		noio_flag = memalloc_noio_save();
+	if (flags & KM_NOFS)
+		nofs_flag = memalloc_nofs_save();
 
 	lflags = kmem_flags_convert(flags);
 	ptr = __vmalloc(size, lflags | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL);
 
-	if ((current->flags & PF_MEMALLOC_NOFS) || (flags & KM_NOFS))
-		memalloc_noio_restore(noio_flag);
+	if (flags & KM_NOFS)
+		memalloc_nofs_restore(nofs_flag);
 
 	return ptr;
 }
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index f31ae592dcae..e9eec256056c 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -441,17 +441,17 @@ _xfs_buf_map_pages(
 		bp->b_addr = NULL;
 	} else {
 		int retried = 0;
-		unsigned noio_flag;
+		unsigned nofs_flag;
 
 		/*
 		 * vm_map_ram() will allocate auxillary structures (e.g.
 		 * pagetables) with GFP_KERNEL, yet we are likely to be under
 		 * GFP_NOFS context here. Hence we need to tell memory reclaim
-		 * that we are in such a context via PF_MEMALLOC_NOIO to prevent
+		 * that we are in such a context via PF_MEMALLOC_NOFS to prevent
 		 * memory reclaim re-entering the filesystem here and
 		 * potentially deadlocking.
 		 */
-		noio_flag = memalloc_noio_save();
+		nofs_flag = memalloc_nofs_save();
 		do {
 			bp->b_addr = vm_map_ram(bp->b_pages, bp->b_page_count,
 						-1, PAGE_KERNEL);
@@ -459,7 +459,7 @@ _xfs_buf_map_pages(
 				break;
 			vm_unmap_aliases();
 		} while (retried++ <= 1);
-		memalloc_noio_restore(noio_flag);
+		memalloc_nofs_restore(nofs_flag);
 
 		if (!bp->b_addr)
 			return -ENOMEM;
-- 
2.10.2


-- 
Michal Hocko
SUSE Labs

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/9 v2] scope GFP_NOFS api Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:10 +0100
  [PATCH 5/9] xfs: use memalloc_nofs_{save,restore} instead of memalloc_noio* Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:10 +0100
    Re: [PATCH 5/9] xfs: use memalloc_nofs_{save,restore} instead of  memalloc_noio* Brian Foster <bfoster@redhat.com> - 2016-12-16 17:40 +0100
      [PATCH 5/9 v2] xfs: use memalloc_nofs_{save,restore} instead of  memalloc_noio* Michal Hocko <mhocko@kernel.org> - 2016-12-16 23:10 +0100
  [PATCH 6/9] jbd2: mark the transaction context with the scope GFP_NOFS context Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:10 +0100
    Re: [PATCH 6/9] jbd2: mark the transaction context with the scope  GFP_NOFS context Jan Kara <jack@suse.cz> - 2016-12-19 10:40 +0100
  [PATCH 9/9] Revert "ext4: fix wrong gfp type under transaction" Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:10 +0100
    Re: [PATCH 9/9] Revert "ext4: fix wrong gfp type under transaction" Jan Kara <jack@suse.cz> - 2016-12-19 10:40 +0100
  [PATCH 3/9] xfs: abstract PF_FSTRANS to PF_MEMALLOC_NOFS Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:20 +0100
    Re: [PATCH 3/9] xfs: abstract PF_FSTRANS to PF_MEMALLOC_NOFS Brian Foster <bfoster@redhat.com> - 2016-12-16 17:40 +0100
  [PATCH 7/9] jbd2: make the whole kjournald2 kthread NOFS safe Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:20 +0100
    Re: [PATCH 7/9] jbd2: make the whole kjournald2 kthread NOFS safe Jan Kara <jack@suse.cz> - 2016-12-19 10:40 +0100
  [PATCH 4/9] mm: introduce memalloc_nofs_{save,restore} API Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:20 +0100
  [PATCH 2/9] xfs: introduce and use KM_NOLOCKDEP to silence reclaim lockdep false positives Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:20 +0100
    [PATCH 2/9 v2] xfs: introduce and use KM_NOLOCKDEP to silence  reclaim lockdep false positives Michal Hocko <mhocko@kernel.org> - 2016-12-16 16:50 +0100
      Re: [PATCH 2/9 v2] xfs: introduce and use KM_NOLOCKDEP to silence  reclaim lockdep false positives Brian Foster <bfoster@redhat.com> - 2016-12-16 17:40 +0100
        Re: [PATCH 2/9 v2] xfs: introduce and use KM_NOLOCKDEP to silence  reclaim lockdep false positives Michal Hocko <mhocko@kernel.org> - 2016-12-16 23:10 +0100
    Re: [PATCH 2/9] xfs: introduce and use KM_NOLOCKDEP to silence  reclaim lockdep false positives Dave Chinner <david@fromorbit.com> - 2016-12-19 22:30 +0100
      Re: [PATCH 2/9] xfs: introduce and use KM_NOLOCKDEP to silence  reclaim lockdep false positives "Darrick J. Wong" <darrick.wong@oracle.com> - 2016-12-19 23:10 +0100
        Re: [PATCH 2/9] xfs: introduce and use KM_NOLOCKDEP to silence  reclaim lockdep false positives Dave Chinner <david@fromorbit.com> - 2016-12-20 22:40 +0100
      Re: [PATCH 2/9] xfs: introduce and use KM_NOLOCKDEP to silence  reclaim lockdep false positives Michal Hocko <mhocko@kernel.org> - 2016-12-20 09:40 +0100
  [PATCH 1/9] lockdep: allow to disable reclaim lockup detection Michal Hocko <mhocko@kernel.org> - 2016-12-15 15:20 +0100
  [DEBUG PATCH 0/2] debug explicit GFP_NO{FS,IO} usage from the scope context Michal Hocko <mhocko@kernel.org> - 2016-12-16 13:50 +0100
    [DEBUG PATCH 2/2] silent warnings which we cannot do anything about Michal Hocko <mhocko@kernel.org> - 2016-12-16 13:50 +0100
    [DEBUG PATCH 1/2] mm, debug: report when GFP_NO{FS,IO} is used explicitly from memalloc_no{fs,io}_{save,restore} context Michal Hocko <mhocko@kernel.org> - 2016-12-16 13:50 +0100
  Re: [PATCH 0/9 v2] scope GFP_NOFS api Mike Galbraith <umgwanakikbuti@gmail.com> - 2016-12-16 16:20 +0100
    Re: [PATCH 0/9 v2] scope GFP_NOFS api Michal Hocko <mhocko@kernel.org> - 2016-12-16 16:40 +0100
      Re: [PATCH 0/9 v2] scope GFP_NOFS api Mike Galbraith <umgwanakikbuti@gmail.com> - 2016-12-16 17:30 +0100
        Re: [PATCH 0/9 v2] scope GFP_NOFS api Jan Kara <jack@suse.cz> - 2016-12-19 10:30 +0100
  Re: [PATCH 0/9 v2] scope GFP_NOFS api Michal Hocko <mhocko@kernel.org> - 2016-12-22 10:40 +0100

csiph-web