Unverified Commit 45123fed authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!11485 Bugfix introduced when support folio

Merge Pull Request from: @ci-robot 
 
PR sync from: Liu Shixin <liushixin2@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/5DVFXEZ6L2L3IGXA5SBZXEUE3ZCDYMYK/ 
Liu Shixin (3):
  mm: limit order to 0 when allocated from dynamic pool
  mm: huge_memory: add memory reliable count in
    __discard_anon_folio_pmd_locked()
  mm/shmem: replace HPAGE_PMD_ORDER with PMD_ORDER in
    shmem_alloc_folio()


-- 
2.34.1
 
https://gitee.com/openeuler/kernel/issues/IAO6NS 
 
Link:https://gitee.com/openeuler/kernel/pulls/11485

 

Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarZhang Peng <zhangpeng362@huawei.com>
parents 815b95be 26299423
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
#include <linux/splice.h>
#include <linux/huge_mm.h>
#include <linux/pgtable.h>
#include <linux/dynamic_pool.h>
#include <asm/pgalloc.h>
#include <asm/tlbflush.h>
#include "internal.h"
@@ -1931,6 +1932,8 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index,

		if (!mapping_large_folio_support(mapping))
			order = 0;
		if (order && mm_in_dynamic_pool(current->mm))
			order = 0;
		if (order > MAX_PAGECACHE_ORDER)
			order = MAX_PAGECACHE_ORDER;
		/* If we're not aligned, allocate a smaller folio */
+1 −0
Original line number Diff line number Diff line
@@ -2933,6 +2933,7 @@ static bool __discard_anon_folio_pmd_locked(struct vm_area_struct *vma,
	folio_remove_rmap_pmd(folio, pmd_page(orig_pmd), vma);
	zap_deposited_table(mm, pmdp);
	add_mm_counter(mm, MM_ANONPAGES, -HPAGE_PMD_NR);
	add_reliable_folio_counter(folio, mm, -HPAGE_PMD_NR);
	if (vma->vm_flags & VM_LOCKED)
		mlock_drain_local();
	folio_put(folio);
+2 −0
Original line number Diff line number Diff line
@@ -4395,6 +4395,8 @@ static struct folio *alloc_anon_folio(struct vm_fault *vmf)
	 */
	if (unlikely(userfaultfd_armed(vma)))
		goto fallback;
	if (mm_in_dynamic_pool(vma->vm_mm))
		goto fallback;

	/*
	 * Get a list of all the (large) orders below PMD_ORDER that are enabled
+3 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@
#include <linux/blk-cgroup.h>
#include <linux/fadvise.h>
#include <linux/sched/mm.h>
#include <linux/dynamic_pool.h>

#include "internal.h"

@@ -503,6 +504,8 @@ void page_cache_ra_order(struct readahead_control *ractl,

	if (!mapping_large_folio_support(mapping) || ra->size < 4)
		goto fallback;
	if (mm_in_dynamic_pool(current->mm))
		goto fallback;

	limit = min(limit, index + ra->size - 1);

+1 −1
Original line number Diff line number Diff line
@@ -1735,7 +1735,7 @@ static struct folio *shmem_alloc_folio(gfp_t gfp, int order,
	struct folio *folio;

	shmem_pseudo_vma_init(&pvma, info, index);
	folio = vma_alloc_folio(gfp, order, &pvma, 0, order == HPAGE_PMD_ORDER);
	folio = vma_alloc_folio(gfp, order, &pvma, 0, order == PMD_ORDER);
	shmem_pseudo_vma_destroy(&pvma);

	return folio;