CC: [email protected]
TO: [email protected]

tree:   https://android.googlesource.com/kernel/common android12-5.4
head:   2c6775a89bc167ea4c153db9ffc3b081d34a05b8
commit: 0309b3f479b967acb644f99d214e2b25297a20b1 [17/27] BACKPORT: FROMGIT: 
userfaultfd: support minor fault handling for shmem
:::::: branch date: 12 hours ago
:::::: commit date: 13 hours ago
config: x86_64-randconfig-m001-20210409 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
mm/shmem.c:2448 shmem_mcopy_atomic_pte() error: uninitialized symbol 'memcg'.

vim +/memcg +2448 mm/shmem.c

0cd6144aadd2af Johannes Weiner  2014-04-03  2312  
0309b3f479b967 Axel Rasmussen   2021-03-18  2313  #ifdef CONFIG_USERFAULTFD
0309b3f479b967 Axel Rasmussen   2021-03-18  2314  int 
shmem_mcopy_atomic_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd,
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2315                           
struct vm_area_struct *dst_vma,
0309b3f479b967 Axel Rasmussen   2021-03-18  2316                           
unsigned long dst_addr, unsigned long src_addr,
0309b3f479b967 Axel Rasmussen   2021-03-18  2317                           enum 
mcopy_atomic_mode mode, struct page **pagep)
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2318  {
0309b3f479b967 Axel Rasmussen   2021-03-18  2319        bool is_continue = 
(mode == MCOPY_ATOMIC_CONTINUE);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2320        struct inode *inode = 
file_inode(dst_vma->vm_file);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2321        struct shmem_inode_info 
*info = SHMEM_I(inode);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2322        struct address_space 
*mapping = inode->i_mapping;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2323        gfp_t gfp = 
mapping_gfp_mask(mapping);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2324        pgoff_t pgoff = 
linear_page_index(dst_vma, dst_addr);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2325        struct mem_cgroup 
*memcg;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2326        spinlock_t *ptl;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2327        void *page_kaddr;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2328        struct page *page;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2329        pte_t _dst_pte, 
*dst_pte;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2330        int ret;
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2331        pgoff_t offset, max_off;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2332  
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2333        ret = -ENOMEM;
0f0796945614b7 Mike Rapoport    2017-09-06  2334        if 
(!shmem_inode_acct_block(inode, 1))
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2335                goto out;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2336  
0309b3f479b967 Axel Rasmussen   2021-03-18  2337        if (is_continue) {
0309b3f479b967 Axel Rasmussen   2021-03-18  2338                ret = -EFAULT;
0309b3f479b967 Axel Rasmussen   2021-03-18  2339                page = 
find_lock_page(mapping, pgoff);
0309b3f479b967 Axel Rasmussen   2021-03-18  2340                if (!page)
0309b3f479b967 Axel Rasmussen   2021-03-18  2341                        goto 
out_unacct_blocks;
0309b3f479b967 Axel Rasmussen   2021-03-18  2342        } else if (!*pagep) {
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2343                page = 
shmem_alloc_page(gfp, info, pgoff);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2344                if (!page)
0f0796945614b7 Mike Rapoport    2017-09-06  2345                        goto 
out_unacct_blocks;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2346  
0309b3f479b967 Axel Rasmussen   2021-03-18  2347                if (mode == 
MCOPY_ATOMIC_NORMAL) {      /* mcopy_atomic */
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2348                        
page_kaddr = kmap_atomic(page);
8d10396342063c Mike Rapoport    2017-09-06  2349                        ret = 
copy_from_user(page_kaddr,
8d10396342063c Mike Rapoport    2017-09-06  2350                                
             (const void __user *)src_addr,
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2351                                
             PAGE_SIZE);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2352                        
kunmap_atomic(page_kaddr);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2353  
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2354                        /* 
fallback to copy_from_user outside mmap_sem */
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2355                        if 
(unlikely(ret)) {
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2356                                
*pagep = page;
0f0796945614b7 Mike Rapoport    2017-09-06  2357                                
shmem_inode_unacct_blocks(inode, 1);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2358                                
/* don't free the page */
9e368259ad9883 Andrea Arcangeli 2018-11-30  2359                                
return -ENOENT;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2360                        }
0309b3f479b967 Axel Rasmussen   2021-03-18  2361                } else {        
        /* zeropage */
8d10396342063c Mike Rapoport    2017-09-06  2362                        
clear_highpage(page);
8d10396342063c Mike Rapoport    2017-09-06  2363                }
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2364        } else {
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2365                page = *pagep;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2366                *pagep = NULL;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2367        }
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2368  
0309b3f479b967 Axel Rasmussen   2021-03-18  2369        if (!is_continue) {
0309b3f479b967 Axel Rasmussen   2021-03-18  2370                
VM_BUG_ON(PageSwapBacked(page));
0309b3f479b967 Axel Rasmussen   2021-03-18  2371                
VM_BUG_ON(PageLocked(page));
9cc90c664a65f9 Andrea Arcangeli 2017-02-22  2372                
__SetPageLocked(page);
9cc90c664a65f9 Andrea Arcangeli 2017-02-22  2373                
__SetPageSwapBacked(page);
a425d3584e7e69 Andrea Arcangeli 2017-02-22  2374                
__SetPageUptodate(page);
0309b3f479b967 Axel Rasmussen   2021-03-18  2375        }
9cc90c664a65f9 Andrea Arcangeli 2017-02-22  2376  
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2377        ret = -EFAULT;
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2378        offset = 
linear_page_index(dst_vma, dst_addr);
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2379        max_off = 
DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2380        if (unlikely(offset >= 
max_off))
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2381                goto 
out_release;
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2382  
0309b3f479b967 Axel Rasmussen   2021-03-18  2383        /* If page wasn't 
already in the page cache, add it. */
0309b3f479b967 Axel Rasmussen   2021-03-18  2384        if (!is_continue) {
2cf855837b89d9 Tejun Heo        2018-07-03  2385                ret = 
mem_cgroup_try_charge_delay(page, dst_mm, gfp, &memcg, false);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2386                if (ret)
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2387                        goto 
out_release;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2388  
552446a4166189 Matthew Wilcox   2017-12-01  2389                ret = 
shmem_add_to_page_cache(page, mapping, pgoff, NULL,
552446a4166189 Matthew Wilcox   2017-12-01  2390                                
                gfp & GFP_RECLAIM_MASK);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2391                if (ret)
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2392                        goto 
out_release_uncharge;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2393  
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2394                
mem_cgroup_commit_charge(page, memcg, false, false);
0309b3f479b967 Axel Rasmussen   2021-03-18  2395        }
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2396  
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2397        _dst_pte = mk_pte(page, 
dst_vma->vm_page_prot);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2398        if (dst_vma->vm_flags & 
VM_WRITE)
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2399                _dst_pte = 
pte_mkwrite(pte_mkdirty(_dst_pte));
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2400        else {
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2401                /*
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2402                 * We don't set 
the pte dirty if the vma has no
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2403                 * VM_WRITE 
permission, so mark the page dirty or it
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2404                 * could be 
freed from under us. We could do it
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2405                 * 
unconditionally before unlock_page(), but doing it
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2406                 * only if 
VM_WRITE is not set is faster.
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2407                 */
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2408                
set_page_dirty(page);
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2409        }
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2410  
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2411        dst_pte = 
pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2412  
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2413        ret = -EFAULT;
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2414        max_off = 
DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2415        if (unlikely(offset >= 
max_off))
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2416                goto 
out_release_uncharge_unlock;
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2417  
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2418        ret = -EEXIST;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2419        if (!pte_none(*dst_pte))
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2420                goto 
out_release_uncharge_unlock;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2421  
0309b3f479b967 Axel Rasmussen   2021-03-18  2422        if (!is_continue) {
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2423                
lru_cache_add_anon(page);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2424  
e5329fcdc907f5 Yang Shi         2020-04-20  2425                
spin_lock_irq(&info->lock);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2426                info->alloced++;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2427                inode->i_blocks 
+= BLOCKS_PER_PAGE;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2428                
shmem_recalc_inode(inode);
e5329fcdc907f5 Yang Shi         2020-04-20  2429                
spin_unlock_irq(&info->lock);
0309b3f479b967 Axel Rasmussen   2021-03-18  2430        }
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2431  
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2432        inc_mm_counter(dst_mm, 
mm_counter_file(page));
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2433        
page_add_file_rmap(page, false);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2434        set_pte_at(dst_mm, 
dst_addr, dst_pte, _dst_pte);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2435  
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2436        /* No need to 
invalidate - it was non-present before */
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2437        
update_mmu_cache(dst_vma, dst_addr, dst_pte);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2438        
pte_unmap_unlock(dst_pte, ptl);
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2439        unlock_page(page);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2440        ret = 0;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2441  out:
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2442        return ret;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2443  out_release_uncharge_unlock:
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2444        
pte_unmap_unlock(dst_pte, ptl);
dcf7fe9d89763a Andrea Arcangeli 2018-11-30  2445        ClearPageDirty(page);
e2a50c1f64145a Andrea Arcangeli 2018-11-30  2446        
delete_from_page_cache(page);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2447  out_release_uncharge:
4c27fe4c4c84f3 Mike Rapoport    2017-02-22 @2448        
mem_cgroup_cancel_charge(page, memcg, false);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2449  out_release:
9cc90c664a65f9 Andrea Arcangeli 2017-02-22  2450        unlock_page(page);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2451        put_page(page);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2452  out_unacct_blocks:
0f0796945614b7 Mike Rapoport    2017-09-06  2453        
shmem_inode_unacct_blocks(inode, 1);
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2454        goto out;
4c27fe4c4c84f3 Mike Rapoport    2017-02-22  2455  }
0309b3f479b967 Axel Rasmussen   2021-03-18  2456  #endif /* CONFIG_USERFAULTFD 
*/
8d10396342063c Mike Rapoport    2017-09-06  2457  

:::::: The code at line 2448 was first introduced by commit
:::::: 4c27fe4c4c84f3afd504ecff2420cc1ad420d38e userfaultfd: shmem: add 
shmem_mcopy_atomic_pte for userfaultfd support

:::::: TO: Mike Rapoport <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to