All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kernel@openeuler.org, Yang Yingliang <yangyingliang@huawei.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [openeuler:openEuler-1.0-LTS 1646/1646] mm/khugepaged.c:1336: warning: Function parameter or member 'reliable' not described in 'collapse_shmem'
Date: Tue, 20 May 2025 22:06:51 +0800	[thread overview]
Message-ID: <202505202138.LT7VPPBg-lkp@intel.com> (raw)

Hi Ma,

FYI, the error/warning still remains.

tree:   https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head:   2eb609d2f89b2d85d89cb018c3f97050989807e2
commit: ff0fb9e816fac221fa24a1810dd895745406070b [1646/1646] mm: thp: Add memory reliable support for hugepaged collapse
config: x86_64-buildonly-randconfig-002-20250520 (https://download.01.org/0day-ci/archive/20250520/202505202138.LT7VPPBg-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250520/202505202138.LT7VPPBg-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505202138.LT7VPPBg-lkp@intel.com/

All warnings (new ones prefixed by >>):

   mm/khugepaged.c:1336: warning: Function parameter or member 'mm' not described in 'collapse_shmem'
   mm/khugepaged.c:1336: warning: Function parameter or member 'mapping' not described in 'collapse_shmem'
   mm/khugepaged.c:1336: warning: Function parameter or member 'start' not described in 'collapse_shmem'
   mm/khugepaged.c:1336: warning: Function parameter or member 'hpage' not described in 'collapse_shmem'
   mm/khugepaged.c:1336: warning: Function parameter or member 'node' not described in 'collapse_shmem'
>> mm/khugepaged.c:1336: warning: Function parameter or member 'reliable' not described in 'collapse_shmem'


vim +1336 mm/khugepaged.c

f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1314  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1315  /**
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1316   * collapse_shmem - collapse small tmpfs/shmem pages into huge one.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1317   *
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1318   * Basic scheme is simple, details are more complex:
af24c01831e4e21 Hugh Dickins       2018-11-30  1319   *  - allocate and lock a new huge page;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1320   *  - scan over radix tree replacing old pages the new one
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1321   *    + swap in pages if necessary;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1322   *    + fill in gaps;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1323   *    + keep old pages around in case if rollback is required;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1324   *  - if replacing succeed:
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1325   *    + copy data over;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1326   *    + free old pages;
af24c01831e4e21 Hugh Dickins       2018-11-30  1327   *    + unlock huge page;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1328   *  - if replacing failed;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1329   *    + put all pages back and unfreeze them;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1330   *    + restore gaps in the radix-tree;
af24c01831e4e21 Hugh Dickins       2018-11-30  1331   *    + unlock and free huge page;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1332   */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1333  static void collapse_shmem(struct mm_struct *mm,
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1334  		struct address_space *mapping, pgoff_t start,
ff0fb9e816fac22 Ma Wupeng          2022-02-09  1335  		struct page **hpage, int node, bool reliable)
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26 @1336  {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1337  	gfp_t gfp;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1338  	struct page *page, *new_page, *tmp;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1339  	struct mem_cgroup *memcg;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1340  	pgoff_t index, end = start + HPAGE_PMD_NR;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1341  	LIST_HEAD(pagelist);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1342  	struct radix_tree_iter iter;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1343  	void **slot;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1344  	int nr_none = 0, result = SCAN_SUCCEED;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1345  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1346  	VM_BUG_ON(start & (HPAGE_PMD_NR - 1));
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1347  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1348  	/* Only allocate from the target node */
41b6167e8f746b4 Michal Hocko       2017-01-10  1349  	gfp = alloc_hugepage_khugepaged_gfpmask() | __GFP_THISNODE;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1350  
ff0fb9e816fac22 Ma Wupeng          2022-02-09  1351  	if (reliable)
ff0fb9e816fac22 Ma Wupeng          2022-02-09  1352  		gfp |= ___GFP_RELIABILITY;
ff0fb9e816fac22 Ma Wupeng          2022-02-09  1353  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1354  	new_page = khugepaged_alloc_page(hpage, gfp, node);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1355  	if (!new_page) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1356  		result = SCAN_ALLOC_HUGE_PAGE_FAIL;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1357  		goto out;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1358  	}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1359  
2a70f6a76bb86d1 Michal Hocko       2018-04-10  1360  	if (unlikely(mem_cgroup_try_charge(new_page, mm, gfp, &memcg, true))) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1361  		result = SCAN_CGROUP_CHARGE_FAIL;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1362  		goto out;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1363  	}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1364  
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1365  	__SetPageLocked(new_page);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1366  	__SetPageSwapBacked(new_page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1367  	new_page->index = start;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1368  	new_page->mapping = mapping;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1369  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1370  	/*
af24c01831e4e21 Hugh Dickins       2018-11-30  1371  	 * At this point the new_page is locked and not up-to-date.
af24c01831e4e21 Hugh Dickins       2018-11-30  1372  	 * It's safe to insert it into the page cache, because nobody would
af24c01831e4e21 Hugh Dickins       2018-11-30  1373  	 * be able to map it or use it in another way until we unlock it.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1374  	 */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1375  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1376  	index = start;
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1377  	xa_lock_irq(&mapping->i_pages);
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1378  	radix_tree_for_each_slot(slot, &mapping->i_pages, &iter, start) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1379  		int n = min(iter.index, end) - index;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1380  
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1381  		/*
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1382  		 * Stop if extent has been hole-punched, and is now completely
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1383  		 * empty (the more obvious i_size_read() check would take an
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1384  		 * irq-unsafe seqlock on 32-bit).
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1385  		 */
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1386  		if (n >= HPAGE_PMD_NR) {
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1387  			result = SCAN_TRUNCATED;
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1388  			goto tree_locked;
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1389  		}
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1390  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1391  		/*
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1392  		 * Handle holes in the radix tree: charge it from shmem and
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1393  		 * insert relevant subpage of new_page into the radix-tree.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1394  		 */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1395  		if (n && !shmem_charge(mapping->host, n)) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1396  			result = SCAN_FAIL;
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1397  			goto tree_locked;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1398  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1399  		for (; index < min(iter.index, end); index++) {
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1400  			radix_tree_insert(&mapping->i_pages, index,
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1401  					new_page + (index % HPAGE_PMD_NR));
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1402  		}
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1403  		nr_none += n;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1404  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1405  		/* We are done. */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1406  		if (index >= end)
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1407  			break;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1408  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1409  		page = radix_tree_deref_slot_protected(slot,
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1410  				&mapping->i_pages.xa_lock);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1411  		if (radix_tree_exceptional_entry(page) || !PageUptodate(page)) {
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1412  			xa_unlock_irq(&mapping->i_pages);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1413  			/* swap in or instantiate fallocated page */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1414  			if (shmem_getpage(mapping->host, index, &page,
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1415  						SGP_NOHUGE)) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1416  				result = SCAN_FAIL;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1417  				goto tree_unlocked;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1418  			}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1419  		} else if (trylock_page(page)) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1420  			get_page(page);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1421  			xa_unlock_irq(&mapping->i_pages);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1422  		} else {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1423  			result = SCAN_PAGE_LOCK;
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1424  			goto tree_locked;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1425  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1426  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1427  		/*
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1428  		 * The page must be locked, so we can drop the i_pages lock
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1429  		 * without racing with truncate.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1430  		 */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1431  		VM_BUG_ON_PAGE(!PageLocked(page), page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1432  		VM_BUG_ON_PAGE(!PageUptodate(page), page);
8b37c40503eadc6 Hugh Dickins       2018-11-30  1433  
8b37c40503eadc6 Hugh Dickins       2018-11-30  1434  		/*
8b37c40503eadc6 Hugh Dickins       2018-11-30  1435  		 * If file was truncated then extended, or hole-punched, before
8b37c40503eadc6 Hugh Dickins       2018-11-30  1436  		 * we locked the first page, then a THP might be there already.
8b37c40503eadc6 Hugh Dickins       2018-11-30  1437  		 */
8b37c40503eadc6 Hugh Dickins       2018-11-30  1438  		if (PageTransCompound(page)) {
8b37c40503eadc6 Hugh Dickins       2018-11-30  1439  			result = SCAN_PAGE_COMPOUND;
8b37c40503eadc6 Hugh Dickins       2018-11-30  1440  			goto out_unlock;
8b37c40503eadc6 Hugh Dickins       2018-11-30  1441  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1442  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1443  		if (page_mapping(page) != mapping) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1444  			result = SCAN_TRUNCATED;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1445  			goto out_unlock;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1446  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1447  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1448  		if (isolate_lru_page(page)) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1449  			result = SCAN_DEL_PAGE_LRU;
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1450  			goto out_unlock;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1451  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1452  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1453  		if (page_mapped(page))
977fbdcd5986c9f Matthew Wilcox     2018-01-31  1454  			unmap_mapping_pages(mapping, index, 1, false);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1455  
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1456  		xa_lock_irq(&mapping->i_pages);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1457  
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1458  		slot = radix_tree_lookup_slot(&mapping->i_pages, index);
91a45f71078a656 Johannes Weiner    2016-12-12  1459  		VM_BUG_ON_PAGE(page != radix_tree_deref_slot_protected(slot,
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1460  					&mapping->i_pages.xa_lock), page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1461  		VM_BUG_ON_PAGE(page_mapped(page), page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1462  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1463  		/*
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1464  		 * The page is expected to have page_count() == 3:
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1465  		 *  - we hold a pin on it;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1466  		 *  - one reference from radix tree;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1467  		 *  - one from isolate_lru_page;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1468  		 */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1469  		if (!page_ref_freeze(page, 3)) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1470  			result = SCAN_PAGE_COUNT;
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1471  			xa_unlock_irq(&mapping->i_pages);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1472  			putback_lru_page(page);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1473  			goto out_unlock;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1474  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1475  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1476  		/*
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1477  		 * Add the page to the list to be able to undo the collapse if
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1478  		 * something go wrong.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1479  		 */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1480  		list_add_tail(&page->lru, &pagelist);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1481  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1482  		/* Finally, replace with the new page. */
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1483  		radix_tree_replace_slot(&mapping->i_pages, slot,
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1484  				new_page + (index % HPAGE_PMD_NR));
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1485  
148deab223b2373 Matthew Wilcox     2016-12-14  1486  		slot = radix_tree_iter_resume(slot, &iter);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1487  		index++;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1488  		continue;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1489  out_unlock:
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1490  		unlock_page(page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1491  		put_page(page);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1492  		goto tree_unlocked;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1493  	}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1494  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1495  	/*
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1496  	 * Handle hole in radix tree at the end of the range.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1497  	 * This code only triggers if there's nothing in radix tree
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1498  	 * beyond 'end'.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1499  	 */
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1500  	if (index < end) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1501  		int n = end - index;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1502  
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1503  		/* Stop if extent has been truncated, and is now empty */
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1504  		if (n >= HPAGE_PMD_NR) {
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1505  			result = SCAN_TRUNCATED;
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1506  			goto tree_locked;
8797f2f4fe0d555 Hugh Dickins       2018-11-30  1507  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1508  		if (!shmem_charge(mapping->host, n)) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1509  			result = SCAN_FAIL;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1510  			goto tree_locked;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1511  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1512  		for (; index < end; index++) {
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1513  			radix_tree_insert(&mapping->i_pages, index,
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1514  					new_page + (index % HPAGE_PMD_NR));
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1515  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1516  		nr_none += n;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1517  	}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1518  
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1519  	__inc_node_page_state(new_page, NR_SHMEM_THPS);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1520  	if (nr_none) {
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1521  		struct zone *zone = page_zone(new_page);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1522  
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1523  		__mod_node_page_state(zone->zone_pgdat, NR_FILE_PAGES, nr_none);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1524  		__mod_node_page_state(zone->zone_pgdat, NR_SHMEM, nr_none);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1525  	}
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1526  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1527  tree_locked:
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1528  	xa_unlock_irq(&mapping->i_pages);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1529  tree_unlocked:
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1530  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1531  	if (result == SCAN_SUCCEED) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1532  		/*
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1533  		 * Replacing old pages with new one has succeed, now we need to
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1534  		 * copy the content and free old pages.
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1535  		 */
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1536  		index = start;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1537  		list_for_each_entry_safe(page, tmp, &pagelist, lru) {
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1538  			while (index < page->index) {
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1539  				clear_highpage(new_page + (index % HPAGE_PMD_NR));
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1540  				index++;
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1541  			}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1542  			copy_highpage(new_page + (page->index % HPAGE_PMD_NR),
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1543  					page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1544  			list_del(&page->lru);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1545  			page->mapping = NULL;
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1546  			page_ref_unfreeze(page, 1);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1547  			ClearPageActive(page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1548  			ClearPageUnevictable(page);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1549  			unlock_page(page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1550  			put_page(page);
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1551  			index++;
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1552  		}
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1553  		while (index < end) {
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1554  			clear_highpage(new_page + (index % HPAGE_PMD_NR));
ee13d69bc1e8a55 Hugh Dickins       2018-11-30  1555  			index++;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1556  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1557  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1558  		SetPageUptodate(new_page);
af24c01831e4e21 Hugh Dickins       2018-11-30  1559  		page_ref_add(new_page, HPAGE_PMD_NR - 1);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1560  		set_page_dirty(new_page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1561  		mem_cgroup_commit_charge(new_page, memcg, false, true);
9d5425af85abe36 Chris Down         2021-06-30  1562  		count_memcg_events(memcg, THP_COLLAPSE_ALLOC, 1);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1563  		lru_cache_add_anon(new_page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1564  
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1565  		/*
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1566  		 * Remove pte page tables, so we can re-fault the page as huge.
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1567  		 */
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1568  		retract_page_tables(mapping, start);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1569  		*hpage = NULL;
87aa752906ecf69 Yang Shi           2018-08-17  1570  
87aa752906ecf69 Yang Shi           2018-08-17  1571  		khugepaged_pages_collapsed++;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1572  	} else {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1573  		/* Something went wrong: rollback changes to the radix-tree */
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1574  		xa_lock_irq(&mapping->i_pages);
78141aabfbb9560 Hugh Dickins       2018-11-30  1575  		mapping->nrpages -= nr_none;
78141aabfbb9560 Hugh Dickins       2018-11-30  1576  		shmem_uncharge(mapping->host, nr_none);
78141aabfbb9560 Hugh Dickins       2018-11-30  1577  
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1578  		radix_tree_for_each_slot(slot, &mapping->i_pages, &iter, start) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1579  			if (iter.index >= end)
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1580  				break;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1581  			page = list_first_entry_or_null(&pagelist,
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1582  					struct page, lru);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1583  			if (!page || iter.index < page->index) {
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1584  				if (!nr_none)
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1585  					break;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1586  				nr_none--;
59749e6ce53735d Johannes Weiner    2016-12-12  1587  				/* Put holes back where they were */
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1588  				radix_tree_delete(&mapping->i_pages, iter.index);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1589  				continue;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1590  			}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1591  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1592  			VM_BUG_ON_PAGE(page->index != iter.index, page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1593  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1594  			/* Unfreeze the page. */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1595  			list_del(&page->lru);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1596  			page_ref_unfreeze(page, 2);
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1597  			radix_tree_replace_slot(&mapping->i_pages, slot, page);
148deab223b2373 Matthew Wilcox     2016-12-14  1598  			slot = radix_tree_iter_resume(slot, &iter);
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1599  			xa_unlock_irq(&mapping->i_pages);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1600  			unlock_page(page);
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1601  			putback_lru_page(page);
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1602  			xa_lock_irq(&mapping->i_pages);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1603  		}
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1604  		VM_BUG_ON(nr_none);
b93b016313b3ba8 Matthew Wilcox     2018-04-10  1605  		xa_unlock_irq(&mapping->i_pages);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1606  
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1607  		mem_cgroup_cancel_charge(new_page, memcg, true);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1608  		new_page->mapping = NULL;
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1609  	}
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1610  
3e9646c76cb91d6 Hugh Dickins       2018-11-30  1611  	unlock_page(new_page);
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1612  out:
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1613  	VM_BUG_ON(!list_empty(&pagelist));
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1614  	/* TODO: tracepoints */
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1615  }
f3f0e1d2150b2b9 Kirill A. Shutemov 2016-07-26  1616  

:::::: The code at line 1336 was first introduced by commit
:::::: f3f0e1d2150b2b99da2cbdfaad000089efe9bf30 khugepaged: add support of collapse for tmpfs/shmem pages

:::::: TO: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

                 reply	other threads:[~2025-05-20 14:07 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202505202138.LT7VPPBg-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kernel@openeuler.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=yangyingliang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.