Unverified Commit 3a521e13 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!6677 v3 olk-5.10: bugfix for mm

Merge Pull Request from: @ci-robot 
 
PR sync from: Wupeng Ma <mawupeng1@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/F2VRDUQ6NU77XVWZ7ZJ63PSSBRJBGCO4/ 
From: Ma Wupeng <mawupeng1@huawei.com>

backport minor bugfix for mm.

Changelog since v2:
- fix style problem.

Changelog since v1:
- fix style problem.

Mel Gorman (1):
  mm/page_alloc: always attempt to allocate at least one page during
    bulk allocation

Miaohe Lin (1):
  mm/madvise: fix potential pte_unmap_unlock pte error


-- 
2.25.1
 
https://gitee.com/openeuler/kernel/issues/I9JPDJ 
 
Link:https://gitee.com/openeuler/kernel/pulls/6677

 

Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents b93b1105 445475d0
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -451,12 +451,12 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
			if (split_huge_page(page)) {
				unlock_page(page);
				put_page(page);
				pte_offset_map_lock(mm, pmd, addr, &ptl);
				orig_pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
				break;
			}
			unlock_page(page);
			put_page(page);
			pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
			orig_pte = pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
			pte--;
			addr -= PAGE_SIZE;
			continue;
@@ -669,12 +669,12 @@ static int madvise_free_pte_range(pmd_t *pmd, unsigned long addr,
			if (split_huge_page(page)) {
				unlock_page(page);
				put_page(page);
				pte_offset_map_lock(mm, pmd, addr, &ptl);
				orig_pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
				goto out;
			}
			unlock_page(page);
			put_page(page);
			pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
			orig_pte = pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
			pte--;
			addr -= PAGE_SIZE;
			continue;
+4 −3
Original line number Diff line number Diff line
@@ -5121,7 +5121,7 @@ unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
	struct alloc_context ac;
	gfp_t alloc_gfp;
	unsigned int alloc_flags = ALLOC_WMARK_LOW;
	int nr_populated = 0;
	int nr_populated = 0, nr_account = 0;

	/*
	 * Skip populated array elements to determine if any pages need
@@ -5206,11 +5206,12 @@ unsigned long __alloc_pages_bulk(gfp_t gfp, int preferred_nid,
		page = __rmqueue_pcplist(zone, ac.migratetype, alloc_flags,
								pcp, pcp_list);
		if (unlikely(!page)) {
			/* Try and get at least one page */
			if (!nr_populated)
			/* Try and allocate at least one page */
			if (!nr_account)
				goto failed_irq;
			break;
		}
		nr_account++;

		/*
		 * Ideally this would be batched but the best way to do