Hi Minchan,

[auto build test ERROR on mmotm/master]
[also build test ERROR on next-20170912]
[cannot apply to linus/master v4.13]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Minchan-Kim/zram-set-BDI_CAP_STABLE_WRITES-once/20170913-025838
base:   git://git.cmpxchg.org/linux-mmotm.git master
config: x86_64-randconfig-x016-201737 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

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

   mm/memory.c: In function 'do_swap_page':
>> mm/memory.c:2891:33: error: implicit declaration of function 'swp_swap_info' 
>> [-Werror=implicit-function-declaration]
      struct swap_info_struct *si = swp_swap_info(entry);
                                    ^~~~~~~~~~~~~
>> mm/memory.c:2891:33: warning: initialization makes pointer from integer 
>> without a cast [-Wint-conversion]
>> mm/memory.c:2908:4: error: implicit declaration of function 'swap_readpage' 
>> [-Werror=implicit-function-declaration]
       swap_readpage(page, true);
       ^~~~~~~~~~~~~
   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/linux/smp.h:10,
                    from include/linux/kernel_stat.h:4,
                    from mm/memory.c:41:
   mm/memory.c: At top level:
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in 
inline function 'memcpy_and_pad' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:451:2: note: in expansion of macro 'if'
     if (dest_len > count) {
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in 
inline function 'memcpy_and_pad' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:449:2: note: in expansion of macro 'if'
     if (dest_size < dest_len)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in 
inline function 'memcpy_and_pad' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:446:8: note: in expansion of macro 'if'
      else if (src_size < dest_len && src_size < count)
           ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in 
inline function 'memcpy_and_pad' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:444:3: note: in expansion of macro 'if'
      if (dest_size < dest_len && dest_size < count)
      ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in 
inline function 'memcpy_and_pad' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:443:2: note: in expansion of macro 'if'
     if (__builtin_constant_p(dest_len) && __builtin_constant_p(count)) {
     ^~
   cc1: some warnings being treated as errors

vim +/swp_swap_info +2891 mm/memory.c

  2833  
  2834  /*
  2835   * We enter with non-exclusive mmap_sem (to exclude vma changes,
  2836   * but allow concurrent faults), and pte mapped but not yet locked.
  2837   * We return with pte unmapped and unlocked.
  2838   *
  2839   * We return with the mmap_sem locked or unlocked in the same cases
  2840   * as does filemap_fault().
  2841   */
  2842  int do_swap_page(struct vm_fault *vmf)
  2843  {
  2844          struct vm_area_struct *vma = vmf->vma;
  2845          struct page *page = NULL, *swapcache = NULL;
  2846          struct mem_cgroup *memcg;
  2847          struct vma_swap_readahead swap_ra;
  2848          swp_entry_t entry;
  2849          pte_t pte;
  2850          int locked;
  2851          int exclusive = 0;
  2852          int ret = 0;
  2853          bool vma_readahead = swap_use_vma_readahead();
  2854  
  2855          if (vma_readahead)
  2856                  page = swap_readahead_detect(vmf, &swap_ra);
  2857          if (!pte_unmap_same(vma->vm_mm, vmf->pmd, vmf->pte, 
vmf->orig_pte)) {
  2858                  if (page)
  2859                          put_page(page);
  2860                  goto out;
  2861          }
  2862  
  2863          entry = pte_to_swp_entry(vmf->orig_pte);
  2864          if (unlikely(non_swap_entry(entry))) {
  2865                  if (is_migration_entry(entry)) {
  2866                          migration_entry_wait(vma->vm_mm, vmf->pmd,
  2867                                               vmf->address);
  2868                  } else if (is_device_private_entry(entry)) {
  2869                          /*
  2870                           * For un-addressable device memory we call the 
pgmap
  2871                           * fault handler callback. The callback must 
migrate
  2872                           * the page back to some CPU accessible page.
  2873                           */
  2874                          ret = device_private_entry_fault(vma, 
vmf->address, entry,
  2875                                                   vmf->flags, vmf->pmd);
  2876                  } else if (is_hwpoison_entry(entry)) {
  2877                          ret = VM_FAULT_HWPOISON;
  2878                  } else {
  2879                          print_bad_pte(vma, vmf->address, vmf->orig_pte, 
NULL);
  2880                          ret = VM_FAULT_SIGBUS;
  2881                  }
  2882                  goto out;
  2883          }
  2884  
  2885  
  2886          delayacct_set_flag(DELAYACCT_PF_SWAPIN);
  2887          if (!page)
  2888                  page = lookup_swap_cache(entry, vma_readahead ? vma : 
NULL,
  2889                                           vmf->address);
  2890          if (!page) {
> 2891                  struct swap_info_struct *si = swp_swap_info(entry);
  2892  
  2893                  if (!(si->flags & SWP_SYNCHRONOUS_IO)) {
  2894                          if (vma_readahead)
  2895                                  page = do_swap_page_readahead(entry,
  2896                                          GFP_HIGHUSER_MOVABLE, vmf, 
&swap_ra);
  2897                          else
  2898                                  page = swapin_readahead(entry,
  2899                                          GFP_HIGHUSER_MOVABLE, vma, 
vmf->address);
  2900                          swapcache = page;
  2901                  } else {
  2902                          /* skip swapcache */
  2903                          page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, 
vma, vmf->address);
  2904                          __SetPageLocked(page);
  2905                          __SetPageSwapBacked(page);
  2906                          set_page_private(page, entry.val);
  2907                          lru_cache_add_anon(page);
> 2908                          swap_readpage(page, true);
  2909                  }
  2910  
  2911                  if (!page) {
  2912                          /*
  2913                           * Back out if somebody else faulted in this pte
  2914                           * while we released the pte lock.
  2915                           */
  2916                          vmf->pte = pte_offset_map_lock(vma->vm_mm, 
vmf->pmd,
  2917                                          vmf->address, &vmf->ptl);
  2918                          if (likely(pte_same(*vmf->pte, vmf->orig_pte)))
  2919                                  ret = VM_FAULT_OOM;
  2920                          delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
  2921                          goto unlock;
  2922                  }
  2923  
  2924                  /* Had to read the page from swap area: Major fault */
  2925                  ret = VM_FAULT_MAJOR;
  2926                  count_vm_event(PGMAJFAULT);
  2927                  count_memcg_event_mm(vma->vm_mm, PGMAJFAULT);
  2928          } else if (PageHWPoison(page)) {
  2929                  /*
  2930                   * hwpoisoned dirty swapcache pages are kept for killing
  2931                   * owner processes (which may be unknown at hwpoison 
time)
  2932                   */
  2933                  ret = VM_FAULT_HWPOISON;
  2934                  delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
  2935                  swapcache = page;
  2936                  goto out_release;
  2937          }
  2938  
  2939          locked = lock_page_or_retry(page, vma->vm_mm, vmf->flags);
  2940  
  2941          delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
  2942          if (!locked) {
  2943                  ret |= VM_FAULT_RETRY;
  2944                  goto out_release;
  2945          }
  2946  
  2947          /*
  2948           * Make sure try_to_free_swap or reuse_swap_page or swapoff did 
not
  2949           * release the swapcache from under us.  The page pin, and 
pte_same
  2950           * test below, are not enough to exclude that.  Even if it is 
still
  2951           * swapcache, we need to check that the page's swap has not 
changed.
  2952           */
  2953          if (unlikely((!PageSwapCache(page) ||
  2954                          page_private(page) != entry.val)) && swapcache)
  2955                  goto out_page;
  2956  
  2957          page = ksm_might_need_to_copy(page, vma, vmf->address);
  2958          if (unlikely(!page)) {
  2959                  ret = VM_FAULT_OOM;
  2960                  page = swapcache;
  2961                  goto out_page;
  2962          }
  2963  
  2964          if (mem_cgroup_try_charge(page, vma->vm_mm, GFP_KERNEL,
  2965                                  &memcg, false)) {
  2966                  ret = VM_FAULT_OOM;
  2967                  goto out_page;
  2968          }
  2969  
  2970          /*
  2971           * Back out if somebody else already faulted in this pte.
  2972           */
  2973          vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, 
vmf->address,
  2974                          &vmf->ptl);
  2975          if (unlikely(!pte_same(*vmf->pte, vmf->orig_pte)))
  2976                  goto out_nomap;
  2977  
  2978          if (unlikely(!PageUptodate(page))) {
  2979                  ret = VM_FAULT_SIGBUS;
  2980                  goto out_nomap;
  2981          }
  2982  
  2983          /*
  2984           * The page isn't present yet, go ahead with the fault.
  2985           *
  2986           * Be careful about the sequence of operations here.
  2987           * To get its accounting right, reuse_swap_page() must be called
  2988           * while the page is counted on swap but not yet in mapcount 
i.e.
  2989           * before page_add_anon_rmap() and swap_free(); 
try_to_free_swap()
  2990           * must be called after the swap_free(), or it will never 
succeed.
  2991           */
  2992  
  2993          inc_mm_counter_fast(vma->vm_mm, MM_ANONPAGES);
  2994          dec_mm_counter_fast(vma->vm_mm, MM_SWAPENTS);
  2995          pte = mk_pte(page, vma->vm_page_prot);
  2996          if ((vmf->flags & FAULT_FLAG_WRITE) && reuse_swap_page(page, 
NULL)) {
  2997                  pte = maybe_mkwrite(pte_mkdirty(pte), vma);
  2998                  vmf->flags &= ~FAULT_FLAG_WRITE;
  2999                  ret |= VM_FAULT_WRITE;
  3000                  exclusive = RMAP_EXCLUSIVE;
  3001          }
  3002          flush_icache_page(vma, page);
  3003          if (pte_swp_soft_dirty(vmf->orig_pte))
  3004                  pte = pte_mksoft_dirty(pte);
  3005          set_pte_at(vma->vm_mm, vmf->address, vmf->pte, pte);
  3006          vmf->orig_pte = pte;
  3007  
  3008          /* ksm created a completely new copy */
  3009          if (unlikely(page != swapcache && swapcache)) {
  3010                  page_add_new_anon_rmap(page, vma, vmf->address, false);
  3011                  mem_cgroup_commit_charge(page, memcg, false, false);
  3012                  lru_cache_add_active_or_unevictable(page, vma);
  3013          } else {
  3014                  do_page_add_anon_rmap(page, vma, vmf->address, 
exclusive);
  3015                  mem_cgroup_commit_charge(page, memcg, true, false);
  3016                  activate_page(page);
  3017          }
  3018  
  3019          swap_free(entry);
  3020          if (mem_cgroup_swap_full(page) ||
  3021              (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
  3022                  try_to_free_swap(page);
  3023          unlock_page(page);
  3024          if (page != swapcache && swapcache) {
  3025                  /*
  3026                   * Hold the lock to avoid the swap entry to be reused
  3027                   * until we take the PT lock for the pte_same() check
  3028                   * (to avoid false positives from pte_same). For
  3029                   * further safety release the lock after the swap_free
  3030                   * so that the swap count won't change under a
  3031                   * parallel locked swapcache.
  3032                   */
  3033                  unlock_page(swapcache);
  3034                  put_page(swapcache);
  3035          }
  3036  
  3037          if (vmf->flags & FAULT_FLAG_WRITE) {
  3038                  ret |= do_wp_page(vmf);
  3039                  if (ret & VM_FAULT_ERROR)
  3040                          ret &= VM_FAULT_ERROR;
  3041                  goto out;
  3042          }
  3043  
  3044          /* No need to invalidate - it was non-present before */
  3045          update_mmu_cache(vma, vmf->address, vmf->pte);
  3046  unlock:
  3047          pte_unmap_unlock(vmf->pte, vmf->ptl);
  3048  out:
  3049          return ret;
  3050  out_nomap:
  3051          mem_cgroup_cancel_charge(page, memcg, false);
  3052          pte_unmap_unlock(vmf->pte, vmf->ptl);
  3053  out_page:
  3054          unlock_page(page);
  3055  out_release:
  3056          put_page(page);
  3057          if (page != swapcache) {
  3058                  unlock_page(swapcache);
  3059                  put_page(swapcache);
  3060          }
  3061          return ret;
  3062  }
  3063  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to