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