diff options
author | openeuler-ci-bot <george@openeuler.sh> | 2024-04-29 12:18:34 +0000 |
---|---|---|
committer | Gitee <noreply@gitee.com> | 2024-04-29 12:18:34 +0000 |
commit | 1ddaf66e6e1a2a23c3bab61557bc375c02ae835c (patch) | |
tree | 44ded0d3de84f5899d14a60c704337ecc3dbf5d3 | |
parent | d50b253934f51e6d23d53e25f92013e6390a2df9 (diff) | |
parent | deb461419eb3dddd058a438568bbe55d2933d7b5 (diff) | |
download | openEuler-kernel-openEuler-22.03-LTS.tar.gz |
!6751 [sync] PR-6677: v3 olk-5.10: bugfix for mmopenEuler-22.03-LTS
Merge Pull Request from: @openeuler-sync-bot
Origin pull request:
https://gitee.com/openeuler/kernel/pulls/6677
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/6751
Reviewed-by: Jialin Zhang <zhangjialin11@huawei.com>
Signed-off-by: Jialin Zhang <zhangjialin11@huawei.com>
-rw-r--r-- | mm/madvise.c | 8 | ||||
-rw-r--r-- | mm/page_alloc.c | 7 |
2 files changed, 8 insertions, 7 deletions
diff --git a/mm/madvise.c b/mm/madvise.c index 885fc6e31f4f4e..c0bb4242f50ae3 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -431,12 +431,12 @@ regular_page: 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; @@ -646,12 +646,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; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 085aeecca0c603..7b99b9d1019182 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5025,7 +5025,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 @@ -5110,11 +5110,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 |