[ammarfaizi2-block:akpm/mm/mm-unstable 402/439] mm/shmem.c:1738:10: error: implicit declaration of function 'swap_cache_get_folio' is invalid in C99

From: kernel test robot
Date: Sat Sep 03 2022 - 02:30:08 EST


tree: https://github.com/ammarfaizi2/linux-block akpm/mm/mm-unstable
head: 1e6b789996e7b8b0d382a144a6dccde7b824b510
commit: 91a46452f641672b82f8a01c9f114f85cdfe0d76 [402/439] shmem: eliminate struct page from shmem_swapin_folio()
config: x86_64-randconfig-a012 (https://download.01.org/0day-ci/archive/20220903/202209031437.da4oMdee-lkp@xxxxxxxxx/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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/ammarfaizi2/linux-block/commit/91a46452f641672b82f8a01c9f114f85cdfe0d76
git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
git fetch --no-tags ammarfaizi2-block akpm/mm/mm-unstable
git checkout 91a46452f641672b82f8a01c9f114f85cdfe0d76
# 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=x86_64 SHELL=/bin/bash

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

All error/warnings (new ones prefixed by >>):

>> mm/shmem.c:1738:10: error: implicit declaration of function 'swap_cache_get_folio' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
folio = swap_cache_get_folio(swap, NULL, 0);
^
>> mm/shmem.c:1738:8: warning: incompatible integer to pointer conversion assigning to 'struct folio *' from 'int' [-Wint-conversion]
folio = swap_cache_get_folio(swap, NULL, 0);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.


vim +/swap_cache_get_folio +1738 mm/shmem.c

1711
1712 /*
1713 * Swap in the folio pointed to by *foliop.
1714 * Caller has to make sure that *foliop contains a valid swapped folio.
1715 * Returns 0 and the folio in foliop if success. On failure, returns the
1716 * error code and NULL in *foliop.
1717 */
1718 static int shmem_swapin_folio(struct inode *inode, pgoff_t index,
1719 struct folio **foliop, enum sgp_type sgp,
1720 gfp_t gfp, struct vm_area_struct *vma,
1721 vm_fault_t *fault_type)
1722 {
1723 struct address_space *mapping = inode->i_mapping;
1724 struct shmem_inode_info *info = SHMEM_I(inode);
1725 struct mm_struct *charge_mm = vma ? vma->vm_mm : NULL;
1726 struct folio *folio = NULL;
1727 swp_entry_t swap;
1728 int error;
1729
1730 VM_BUG_ON(!*foliop || !xa_is_value(*foliop));
1731 swap = radix_to_swp_entry(*foliop);
1732 *foliop = NULL;
1733
1734 if (is_swapin_error_entry(swap))
1735 return -EIO;
1736
1737 /* Look it up and read it in.. */
> 1738 folio = swap_cache_get_folio(swap, NULL, 0);
1739 if (!folio) {
1740 /* Or update major stats only when swapin succeeds?? */
1741 if (fault_type) {
1742 *fault_type |= VM_FAULT_MAJOR;
1743 count_vm_event(PGMAJFAULT);
1744 count_memcg_event_mm(charge_mm, PGMAJFAULT);
1745 }
1746 /* Here we actually start the io */
1747 folio = shmem_swapin(swap, gfp, info, index);
1748 if (!folio) {
1749 error = -ENOMEM;
1750 goto failed;
1751 }
1752 }
1753
1754 /* We have to do this with folio locked to prevent races */
1755 folio_lock(folio);
1756 if (!folio_test_swapcache(folio) ||
1757 folio_swap_entry(folio).val != swap.val ||
1758 !shmem_confirm_swap(mapping, index, swap)) {
1759 error = -EEXIST;
1760 goto unlock;
1761 }
1762 if (!folio_test_uptodate(folio)) {
1763 error = -EIO;
1764 goto failed;
1765 }
1766 folio_wait_writeback(folio);
1767
1768 /*
1769 * Some architectures may have to restore extra metadata to the
1770 * folio after reading from swap.
1771 */
1772 arch_swap_restore(swap, folio);
1773
1774 if (shmem_should_replace_folio(folio, gfp)) {
1775 error = shmem_replace_folio(&folio, gfp, info, index);
1776 if (error)
1777 goto failed;
1778 }
1779
1780 error = shmem_add_to_page_cache(folio, mapping, index,
1781 swp_to_radix_entry(swap), gfp,
1782 charge_mm);
1783 if (error)
1784 goto failed;
1785
1786 spin_lock_irq(&info->lock);
1787 info->swapped--;
1788 shmem_recalc_inode(inode);
1789 spin_unlock_irq(&info->lock);
1790
1791 if (sgp == SGP_WRITE)
1792 folio_mark_accessed(folio);
1793
1794 delete_from_swap_cache(folio);
1795 folio_mark_dirty(folio);
1796 swap_free(swap);
1797
1798 *foliop = folio;
1799 return 0;
1800 failed:
1801 if (!shmem_confirm_swap(mapping, index, swap))
1802 error = -EEXIST;
1803 if (error == -EIO)
1804 shmem_set_folio_swapin_error(inode, index, folio, swap);
1805 unlock:
1806 if (folio) {
1807 folio_unlock(folio);
1808 folio_put(folio);
1809 }
1810
1811 return error;
1812 }
1813

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