2022-09-17 03:06:40

by Li Zhong

[permalink] [raw]
Subject: [PATCH v1] mm/vmscan: check the return value of migrate_pages()

Check the return value of migrate_pages() to check error exeuction.

Signed-off-by: Li Zhong <[email protected]>
---
mm/vmscan.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index b2b1431352dc..50aaaa9377e2 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1547,6 +1547,7 @@ static unsigned int demote_page_list(struct list_head *demote_pages,
{
int target_nid = next_demotion_node(pgdat->node_id);
unsigned int nr_succeeded;
+ int ret;

if (list_empty(demote_pages))
return 0;
@@ -1555,10 +1556,13 @@ static unsigned int demote_page_list(struct list_head *demote_pages,
return 0;

/* Demotion ignores all cpuset and mempolicy settings */
- migrate_pages(demote_pages, alloc_demote_page, NULL,
+ ret = migrate_pages(demote_pages, alloc_demote_page, NULL,
target_nid, MIGRATE_ASYNC, MR_DEMOTION,
&nr_succeeded);

+ if (ret)
+ putback_movable_pages(&pagelist);
+
if (current_is_kswapd())
__count_vm_events(PGDEMOTE_KSWAPD, nr_succeeded);
else
--
2.25.1


2022-09-17 04:25:25

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v1] mm/vmscan: check the return value of migrate_pages()

Hi Li,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v6.0-rc5]
[cannot apply to akpm-mm/mm-everything next-20220916]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Li-Zhong/mm-vmscan-check-the-return-value-of-migrate_pages/20220917-101433
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git a335366bad1364a07f49df9da1fdfa6d411a5f39
config: hexagon-randconfig-r041-20220916 (https://download.01.org/0day-ci/archive/20220917/[email protected]/config)
compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 791a7ae1ba3efd6bca96338e10ffde557ba83920)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/0ea516d584bd904c43954e312ac42fced822dcf7
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Li-Zhong/mm-vmscan-check-the-return-value-of-migrate_pages/20220917-101433
git checkout 0ea516d584bd904c43954e312ac42fced822dcf7
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

>> mm/vmscan.c:1564:26: error: use of undeclared identifier 'pagelist'; did you mean 'pageout'?
putback_movable_pages(&pagelist);
^~~~~~~~
pageout
mm/vmscan.c:1215:18: note: 'pageout' declared here
static pageout_t pageout(struct folio *folio, struct address_space *mapping,
^
1 error generated.


vim +1564 mm/vmscan.c

1539
1540 /*
1541 * Take pages on @demote_list and attempt to demote them to
1542 * another node. Pages which are not demoted are left on
1543 * @demote_pages.
1544 */
1545 static unsigned int demote_page_list(struct list_head *demote_pages,
1546 struct pglist_data *pgdat)
1547 {
1548 int target_nid = next_demotion_node(pgdat->node_id);
1549 unsigned int nr_succeeded;
1550 int ret;
1551
1552 if (list_empty(demote_pages))
1553 return 0;
1554
1555 if (target_nid == NUMA_NO_NODE)
1556 return 0;
1557
1558 /* Demotion ignores all cpuset and mempolicy settings */
1559 ret = migrate_pages(demote_pages, alloc_demote_page, NULL,
1560 target_nid, MIGRATE_ASYNC, MR_DEMOTION,
1561 &nr_succeeded);
1562
1563 if (ret)
> 1564 putback_movable_pages(&pagelist);
1565
1566 if (current_is_kswapd())
1567 __count_vm_events(PGDEMOTE_KSWAPD, nr_succeeded);
1568 else
1569 __count_vm_events(PGDEMOTE_DIRECT, nr_succeeded);
1570
1571 return nr_succeeded;
1572 }
1573

--
0-DAY CI Kernel Test Service
https://01.org/lkp

2022-09-17 05:04:17

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH v1] mm/vmscan: check the return value of migrate_pages()

Hi Li,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v6.0-rc5]
[cannot apply to akpm-mm/mm-everything next-20220916]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Li-Zhong/mm-vmscan-check-the-return-value-of-migrate_pages/20220917-101433
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git a335366bad1364a07f49df9da1fdfa6d411a5f39
config: arc-randconfig-r043-20220916 (https://download.01.org/0day-ci/archive/20220917/[email protected]/config)
compiler: arceb-elf-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/0ea516d584bd904c43954e312ac42fced822dcf7
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Li-Zhong/mm-vmscan-check-the-return-value-of-migrate_pages/20220917-101433
git checkout 0ea516d584bd904c43954e312ac42fced822dcf7
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=arc SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

mm/vmscan.c: In function 'demote_page_list':
>> mm/vmscan.c:1564:40: error: 'pagelist' undeclared (first use in this function)
1564 | putback_movable_pages(&pagelist);
| ^~~~~~~~
mm/vmscan.c:1564:40: note: each undeclared identifier is reported only once for each function it appears in


vim +/pagelist +1564 mm/vmscan.c

1539
1540 /*
1541 * Take pages on @demote_list and attempt to demote them to
1542 * another node. Pages which are not demoted are left on
1543 * @demote_pages.
1544 */
1545 static unsigned int demote_page_list(struct list_head *demote_pages,
1546 struct pglist_data *pgdat)
1547 {
1548 int target_nid = next_demotion_node(pgdat->node_id);
1549 unsigned int nr_succeeded;
1550 int ret;
1551
1552 if (list_empty(demote_pages))
1553 return 0;
1554
1555 if (target_nid == NUMA_NO_NODE)
1556 return 0;
1557
1558 /* Demotion ignores all cpuset and mempolicy settings */
1559 ret = migrate_pages(demote_pages, alloc_demote_page, NULL,
1560 target_nid, MIGRATE_ASYNC, MR_DEMOTION,
1561 &nr_succeeded);
1562
1563 if (ret)
> 1564 putback_movable_pages(&pagelist);
1565
1566 if (current_is_kswapd())
1567 __count_vm_events(PGDEMOTE_KSWAPD, nr_succeeded);
1568 else
1569 __count_vm_events(PGDEMOTE_DIRECT, nr_succeeded);
1570
1571 return nr_succeeded;
1572 }
1573

--
0-DAY CI Kernel Test Service
https://01.org/lkp

2022-09-21 10:57:12

by Baolin Wang

[permalink] [raw]
Subject: Re: [PATCH v1] mm/vmscan: check the return value of migrate_pages()

Hi,

On 9/17/2022 10:12 AM, Li Zhong wrote:
> Check the return value of migrate_pages() to check error exeuction.
>
> Signed-off-by: Li Zhong <[email protected]>
> ---
> mm/vmscan.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index b2b1431352dc..50aaaa9377e2 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1547,6 +1547,7 @@ static unsigned int demote_page_list(struct list_head *demote_pages,
> {
> int target_nid = next_demotion_node(pgdat->node_id);
> unsigned int nr_succeeded;
> + int ret;
>
> if (list_empty(demote_pages))
> return 0;
> @@ -1555,10 +1556,13 @@ static unsigned int demote_page_list(struct list_head *demote_pages,
> return 0;
>
> /* Demotion ignores all cpuset and mempolicy settings */
> - migrate_pages(demote_pages, alloc_demote_page, NULL,
> + ret = migrate_pages(demote_pages, alloc_demote_page, NULL,
> target_nid, MIGRATE_ASYNC, MR_DEMOTION,
> &nr_succeeded);
>
> + if (ret)
> + putback_movable_pages(&pagelist);

You can not just put them back into the original lru list, instead the
caller has handled the failed-to-demote pages, which will try to reclaim
them.

In addition, the code cannot even be built successfully.