* [RFC][PATCH v3 00/22] __vmalloc: Propagating GFP allocation flag
@ 2011-03-18 19:41 Prasad Joshi
[not found] ` <20110318194341.GB4746@prasad-kvm>
0 siblings, 1 reply; 3+ messages in thread
From: Prasad Joshi @ 2011-03-18 19:41 UTC (permalink / raw)
To: akpm, linux-arch, linux-kernel, linux-mm, prasadjoshi124, mitra
Cc: chris, x86, jdike, tj, cmetcalf, linux-sh, liqin.chen, lennox.wu,
schwidefsky, heiko.carstens, linux390, benh, paulus, linuxppc-dev,
kyle, deller, jejb, linux-parisc, dhowells, yasutake.koichi,
linux-am33-list, ralf, linux-mips, monstr, microblaze-uclinux,
geert, zippel, sammy, linux-m68k, takata, linux-m32r, tony.luck,
fenghua.yu, linux-ia64, starvik, jesper.nilsson,
linux-cris-kernel, hans-christ
A filesystem might run into a problem while calling __vmalloc(GFP_NOFS)
inside a lock.
It is expected than __vmalloc when called with GFP_NOFS should not
callback the filesystem code even incase of the increased memory
pressure. But the problem is that even if we pass this flag, __vmalloc
itself allocates memory with GFP_KERNEL.
Using GFP_KERNEL allocations may go into the memory reclaim path and try
to free memory by calling file system evict_inode function. Which might
lead into deadlock.
For further details
http://marc.info/?l=linux-mm&m\x128942194520631&w=4
https://bugzilla.kernel.org/show_bug.cgi?id0702
The patch passes the gfp allocation flag all the way down to those
allocating functions.
arch/arm/include/asm/pgalloc.h | 11 +++++-
arch/avr32/include/asm/pgalloc.h | 8 ++++-
arch/cris/include/asm/pgalloc.h | 10 ++++-
arch/frv/include/asm/pgalloc.h | 3 ++
arch/frv/include/asm/pgtable.h | 1 +
arch/frv/mm/pgalloc.c | 9 ++++-
arch/ia64/include/asm/pgalloc.h | 24 +++++++++++--
arch/m32r/include/asm/pgalloc.h | 11 ++++--
arch/m68k/include/asm/motorola_pgalloc.h | 20 +++++++++--
arch/m68k/include/asm/sun3_pgalloc.h | 14 ++++++--
arch/m68k/mm/memory.c | 9 ++++-
arch/microblaze/include/asm/pgalloc.h | 3 ++
arch/microblaze/mm/pgtable.c | 13 +++++--
arch/mips/include/asm/pgalloc.h | 22 ++++++++----
arch/mn10300/include/asm/pgalloc.h | 2 +
arch/mn10300/mm/pgtable.c | 10 ++++-
arch/parisc/include/asm/pgalloc.h | 21 ++++++++---
arch/powerpc/include/asm/pgalloc-32.h | 2 +
arch/powerpc/include/asm/pgalloc-64.h | 27 +++++++++++---
arch/powerpc/mm/pgtable_32.c | 10 ++++-
arch/s390/include/asm/pgalloc.h | 30 +++++++++++++---
arch/s390/mm/pgtable.c | 22 +++++++++---
arch/score/include/asm/pgalloc.h | 13 ++++---
arch/sh/include/asm/pgalloc.h | 8 ++++-
arch/sh/mm/pgtable.c | 8 ++++-
arch/sparc/include/asm/pgalloc_32.h | 5 +++
arch/sparc/include/asm/pgalloc_64.h | 17 ++++++++-
arch/tile/include/asm/pgalloc.h | 13 ++++++-
arch/tile/mm/pgtable.c | 10 ++++-
arch/um/include/asm/pgalloc.h | 1 +
arch/um/kernel/mem.c | 21 ++++++++---
arch/x86/include/asm/pgalloc.h | 17 ++++++++-
arch/x86/mm/pgtable.c | 8 ++++-
arch/xtensa/include/asm/pgalloc.h | 9 ++++-
arch/xtensa/mm/pgtable.c | 11 +++++-
include/asm-generic/4level-fixup.h | 8 +++-
include/asm-generic/pgtable-nopmd.h | 3 +-
include/asm-generic/pgtable-nopud.h | 1 +
include/linux/mm.h | 40 ++++++++++++++++-----
mm/memory.c | 14 ++++---
mm/vmalloc.c | 57 ++++++++++++++++++++----------
41 files changed, 427 insertions(+), 119 deletions(-)
^ permalink raw reply [flat|nested] 3+ messages in thread[parent not found: <20110318194341.GB4746@prasad-kvm>]
[parent not found: <20110318194600.GC4746@prasad-kvm>]
[parent not found: <20110318194740.GD4746@prasad-kvm>]
[parent not found: <20110318194929.GE4746@prasad-kvm>]
[parent not found: <20110318195035.GF4746@prasad-kvm>]
[parent not found: <20110318195141.GG4746@prasad-kvm>]
* Re: [RFC][PATCH v3 07/22] mm, sh: add gfp flags variant of pmd and [not found] ` <20110318195141.GG4746@prasad-kvm> @ 2011-03-18 19:53 ` Prasad Joshi 2011-03-22 14:42 ` [RFC][PATCH v3 07/22] mm, sh: add gfp flags variant of pmd and pte allocations Paul Mundt 0 siblings, 1 reply; 3+ messages in thread From: Prasad Joshi @ 2011-03-18 19:53 UTC (permalink / raw) To: lethal, linux-sh, linux-kernel, prasadjoshi124, mitra - Added __pte_alloc_one_kernel() function to allow caller to allocation flag. Like pte_alloc_one_kernel() this newly added function calls quicklist_alloc() and passes the allocation flag down the call hierarchy. - The function pte_alloc_one_kernel() is modified to call __pte_alloc_one_kernel() using the correct allocation flag. - Similar changes for pmd allocations. Added function __pmd_alloc_one(). - The changes help in fixing the Bug 30702. Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com> Signed-off-by: Anand Mitra <mitra@kqinfotech.com> --- arch/sh/include/asm/pgalloc.h | 8 +++++++- arch/sh/mm/pgtable.c | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/arch/sh/include/asm/pgalloc.h b/arch/sh/include/asm/pgalloc.h index 8c00785..aaed989 100644 --- a/arch/sh/include/asm/pgalloc.h +++ b/arch/sh/include/asm/pgalloc.h @@ -31,10 +31,16 @@ static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, /* * Allocate and free page tables. */ +static inline pte_t *__pte_alloc_one_kernel(struct mm_struct *mm, + unsigned long address, gfp_t gfp_mask) +{ + return quicklist_alloc(QUICK_PT, gfp_mask, NULL); +} + static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) { - return quicklist_alloc(QUICK_PT, GFP_KERNEL | __GFP_REPEAT, NULL); + return __pte_alloc_one_kernel(mm, address, GFP_KERNEL | __GFP_REPEAT); } static inline pgtable_t pte_alloc_one(struct mm_struct *mm, diff --git a/arch/sh/mm/pgtable.c b/arch/sh/mm/pgtable.c index 26e03a1..b938eb8 100644 --- a/arch/sh/mm/pgtable.c +++ b/arch/sh/mm/pgtable.c @@ -45,9 +45,15 @@ void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd) set_pud(pud, __pud((unsigned long)pmd)); } +pmd_t * +__pmd_alloc_one(struct mm_struct *mm, unsigned long address, gfp_t gfp_mask) +{ + return kmem_cache_alloc(pmd_cachep, gfp_mask | __GFP_ZERO); +} + pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) { - return kmem_cache_alloc(pmd_cachep, PGALLOC_GFP); + return __pmd_alloc_one(mm, address, GFP_KERNEL | __GFP_REPEAT); } void pmd_free(struct mm_struct *mm, pmd_t *pmd) -- 1.7.0.4 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [RFC][PATCH v3 07/22] mm, sh: add gfp flags variant of pmd and pte allocations 2011-03-18 19:53 ` [RFC][PATCH v3 07/22] mm, sh: add gfp flags variant of pmd and Prasad Joshi @ 2011-03-22 14:42 ` Paul Mundt 0 siblings, 0 replies; 3+ messages in thread From: Paul Mundt @ 2011-03-22 14:42 UTC (permalink / raw) To: Prasad Joshi; +Cc: linux-sh, linux-kernel, mitra On Fri, Mar 18, 2011 at 07:53:07PM +0000, Prasad Joshi wrote: > > - Added __pte_alloc_one_kernel() function to allow caller to allocation flag. > Like pte_alloc_one_kernel() this newly added function calls > quicklist_alloc() and passes the allocation flag down the call hierarchy. > > - The function pte_alloc_one_kernel() is modified to call > __pte_alloc_one_kernel() using the correct allocation flag. > > - Similar changes for pmd allocations. Added function __pmd_alloc_one(). > > - The changes help in fixing the Bug 30702. > > Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com> > Signed-off-by: Anand Mitra <mitra@kqinfotech.com> Acked-by: Paul Mundt <lethal@linux-sh.org> ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-03-22 14:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-18 19:41 [RFC][PATCH v3 00/22] __vmalloc: Propagating GFP allocation flag Prasad Joshi
[not found] ` <20110318194341.GB4746@prasad-kvm>
[not found] ` <20110318194600.GC4746@prasad-kvm>
[not found] ` <20110318194740.GD4746@prasad-kvm>
[not found] ` <20110318194929.GE4746@prasad-kvm>
[not found] ` <20110318195035.GF4746@prasad-kvm>
[not found] ` <20110318195141.GG4746@prasad-kvm>
2011-03-18 19:53 ` [RFC][PATCH v3 07/22] mm, sh: add gfp flags variant of pmd and Prasad Joshi
2011-03-22 14:42 ` [RFC][PATCH v3 07/22] mm, sh: add gfp flags variant of pmd and pte allocations Paul Mundt
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).