Re: [PATCH] mm: don't be stuck to rmap lock on reclaim path

From: kernel test robot
Date: Tue May 03 2022 - 22:14:32 EST


Hi Minchan,

I love your patch! Perhaps something to improve:

[auto build test WARNING on hnaz-mm/master]

url: https://github.com/intel-lab-lkp/linux/commits/Minchan-Kim/mm-don-t-be-stuck-to-rmap-lock-on-reclaim-path/20220504-010625
base: https://github.com/hnaz/linux-mm master
config: x86_64-randconfig-a013 (https://download.01.org/0day-ci/archive/20220504/202205041057.a78ABZ95-lkp@xxxxxxxxx/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce (this is a W=1 build):
# https://github.com/intel-lab-lkp/linux/commit/0e190ce022ef259d63eb2cf50110b292ba17c79c
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Minchan-Kim/mm-don-t-be-stuck-to-rmap-lock-on-reclaim-path/20220504-010625
git checkout 0e190ce022ef259d63eb2cf50110b292ba17c79c
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

mm/page_idle.c: In function 'page_idle_clear_pte_refs':
>> mm/page_idle.c:106:26: warning: passing argument 2 of 'rmap_walk' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
106 | rmap_walk(folio, &rwc);
| ^~~~
In file included from mm/page_idle.c:11:
include/linux/rmap.h:403:63: note: expected 'struct rmap_walk_control *' but argument is of type 'const struct rmap_walk_control *'
403 | void rmap_walk(struct folio *folio, struct rmap_walk_control *rwc);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~


vim +106 mm/page_idle.c

33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 85
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 86 static void page_idle_clear_pte_refs(struct page *page)
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 87 {
4aed23a2f8aaaa Matthew Wilcox (Oracle 2022-01-29 88) struct folio *folio = page_folio(page);
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 89 /*
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 90 * Since rwc.arg is unused, rwc is effectively immutable, so we
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 91 * can make it static const to save some cycles and stack.
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 92 */
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 93 static const struct rmap_walk_control rwc = {
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 94 .rmap_one = page_idle_clear_pte_refs_one,
2f031c6f042cb8 Matthew Wilcox (Oracle 2022-01-29 95) .anon_lock = folio_lock_anon_vma_read,
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 96 };
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 97 bool need_lock;
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 98
4aed23a2f8aaaa Matthew Wilcox (Oracle 2022-01-29 99) if (!folio_mapped(folio) || !folio_raw_mapping(folio))
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 100 return;
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 101
4aed23a2f8aaaa Matthew Wilcox (Oracle 2022-01-29 102) need_lock = !folio_test_anon(folio) || folio_test_ksm(folio);
4aed23a2f8aaaa Matthew Wilcox (Oracle 2022-01-29 103) if (need_lock && !folio_trylock(folio))
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 104 return;
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 105
84fbbe21894bb9 Matthew Wilcox (Oracle 2022-01-29 @106) rmap_walk(folio, &rwc);
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 107
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 108 if (need_lock)
4aed23a2f8aaaa Matthew Wilcox (Oracle 2022-01-29 109) folio_unlock(folio);
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 110 }
33c3fc71c8cfa3 Vladimir Davydov 2015-09-09 111

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