mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-27 10:24:22 +03:00
Revert "Disable vmalloc() direct reclaim"
This reverts commit 2092cf68d8
. The
use of the PF_MEMALLOC flag was always a hack to work around memory
reclaim deadlocks. Those issues are believed to be resolved so this
workaround can be safely reverted.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
parent
617f79de6a
commit
500e95c884
@ -840,31 +840,11 @@ kv_alloc(spl_kmem_cache_t *skc, int size, int flags)
|
|||||||
|
|
||||||
ASSERT(ISP2(size));
|
ASSERT(ISP2(size));
|
||||||
|
|
||||||
if (skc->skc_flags & KMC_KMEM) {
|
if (skc->skc_flags & KMC_KMEM)
|
||||||
ptr = (void *)__get_free_pages(flags, get_order(size));
|
ptr = (void *)__get_free_pages(flags, get_order(size));
|
||||||
} else {
|
else
|
||||||
/*
|
|
||||||
* As part of vmalloc() an __pte_alloc_kernel() allocation
|
|
||||||
* may occur. This internal allocation does not honor the
|
|
||||||
* gfp flags passed to vmalloc(). This means even when
|
|
||||||
* vmalloc(GFP_NOFS) is called it is possible synchronous
|
|
||||||
* reclaim will occur. This reclaim can trigger file IO
|
|
||||||
* which can result in a deadlock. This issue can be avoided
|
|
||||||
* by explicitly setting PF_MEMALLOC on the process to
|
|
||||||
* subvert synchronous reclaim. The following bug has
|
|
||||||
* been filed at kernel.org to track the issue.
|
|
||||||
*
|
|
||||||
* https://bugzilla.kernel.org/show_bug.cgi?id=30702
|
|
||||||
*/
|
|
||||||
if (!(flags & __GFP_FS))
|
|
||||||
current->flags |= PF_MEMALLOC;
|
|
||||||
|
|
||||||
ptr = __vmalloc(size, flags | __GFP_HIGHMEM, PAGE_KERNEL);
|
ptr = __vmalloc(size, flags | __GFP_HIGHMEM, PAGE_KERNEL);
|
||||||
|
|
||||||
if (!(flags & __GFP_FS))
|
|
||||||
current->flags &= ~PF_MEMALLOC;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Resulting allocated memory will be page aligned */
|
/* Resulting allocated memory will be page aligned */
|
||||||
ASSERT(IS_P2ALIGNED(ptr, PAGE_SIZE));
|
ASSERT(IS_P2ALIGNED(ptr, PAGE_SIZE));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user