All of lore.kernel.org
 help / color / mirror / Atom feed
* mm/memcontrol.c:3528:15: warning: no previous prototype for function 'mem_cgroup_pagecache_get_reclaim_pages'
@ 2024-02-22 23:52 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-02-22 23:52 UTC (permalink / raw)
  To: jasperwang, kaixuxia, frankjpliu, kasong, sagazchen, kernelxing,
	aurelianliu, jason.zeng, wu.zheng, yingbao.jia, pei.p.jia
  Cc: oe-kbuild-all

tree:   https://gitee.com/OpenCloudOS/OpenCloudOS-Kernel.git linux-5.4/lts/5.4.119-20.0009
head:   3bf5c3f6e32e9cfe13f09bac3ae93b8e39d472c1
commit: 06d37efeef4689ee10a610bbe91d85de62b88d6c mm: pagecache limit per cgroup support
date:   2 years, 4 months ago
config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20240223/202402230751.6Mr6df7B-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240223/202402230751.6Mr6df7B-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/202402230751.6Mr6df7B-lkp@intel.com/

All warnings (new ones prefixed by >>):

   mm/memcontrol.c:3414:73: warning: variable 'pre_used' set but not used [-Wunused-but-set-variable]
    3414 |         unsigned long pages_used, pages_max, pages_reclaimed, goal_pages_used, pre_used;
         |                                                                                ^
>> mm/memcontrol.c:3528:15: warning: no previous prototype for function 'mem_cgroup_pagecache_get_reclaim_pages' [-Wmissing-prototypes]
    3528 | unsigned long mem_cgroup_pagecache_get_reclaim_pages(struct mem_cgroup *memcg)
         |               ^
   mm/memcontrol.c:3528:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    3528 | unsigned long mem_cgroup_pagecache_get_reclaim_pages(struct mem_cgroup *memcg)
         | ^
         | static 
   mm/memcontrol.c:3551:21: warning: unused variable 'pre' [-Wunused-variable]
    3551 |         unsigned long max, pre, pages_max;
         |                            ^~~
   mm/memcontrol.c:3566:6: warning: unused variable 'err' [-Wunused-variable]
    3566 |         int err, ret = 0;
         |             ^~~
   mm/memcontrol.c:3572:30: warning: variable 'max' is uninitialized when used here [-Wuninitialized]
    3572 |         xchg(&memcg->pagecache.max, max);
         |                                     ^~~
   include/asm-generic/atomic-instrumented.h:1648:22: note: expanded from macro 'xchg'
    1648 |         arch_xchg(__ai_ptr, __VA_ARGS__);                               \
         |                             ^~~~~~~~~~~
   arch/x86/include/asm/cmpxchg.h:78:45: note: expanded from macro 'arch_xchg'
      78 | #define arch_xchg(ptr, v)       __xchg_op((ptr), (v), xchg, "")
         |                                                   ^
   arch/x86/include/asm/cmpxchg.h:44:39: note: expanded from macro '__xchg_op'
      44 |                 __typeof__ (*(ptr)) __ret = (arg);                      \
         |                                              ^~~
   mm/memcontrol.c:3565:19: note: initialize the variable 'max' to silence this warning
    3565 |         unsigned long max, pages_reclaimed;
         |                          ^
         |                           = 0
   5 warnings generated.


vim +/mem_cgroup_pagecache_get_reclaim_pages +3528 mm/memcontrol.c

  3410	
  3411	unsigned int vm_pagecache_limit_retry_times;
  3412	void mem_cgroup_shrink_pagecache(struct mem_cgroup *memcg, gfp_t gfp_mask)
  3413	{
> 3414		unsigned long pages_used, pages_max, pages_reclaimed, goal_pages_used, pre_used;
  3415		unsigned int retry_times = 0;
  3416		unsigned int limit_retry_times;
  3417	
  3418		if (!memcg || mem_cgroup_is_root(memcg))
  3419			return;
  3420	
  3421		pages_max = READ_ONCE(memcg->pagecache.max);
  3422		if (pages_max == PAGE_COUNTER_MAX || vm_pagecache_limit_global)
  3423			return;
  3424	
  3425		if (gfp_mask & __GFP_ATOMIC)
  3426			return;
  3427	
  3428		if (unlikely(should_force_charge()))
  3429			return;
  3430	
  3431		if (unlikely(current->flags & PF_MEMALLOC))
  3432			return;
  3433	
  3434		if (unlikely(task_in_memcg_oom(current)))
  3435			return;
  3436	
  3437		if (!gfpflags_allow_blocking(gfp_mask))
  3438			return;
  3439	
  3440		pages_used = page_counter_read(&memcg->pagecache);
  3441		limit_retry_times = READ_ONCE(vm_pagecache_limit_retry_times);
  3442		goal_pages_used = (100 - READ_ONCE(memcg->pagecache_reclaim_ratio)) * pages_max / 100;
  3443		goal_pages_used = max_t(unsigned long, MIN_PAGECACHE_PAGES, goal_pages_used);
  3444	
  3445		if (pages_used > pages_max) {
  3446			memcg_memory_event(memcg, MEMCG_PAGECACHE_MAX);
  3447			while (pages_used > goal_pages_used) {
  3448				if (fatal_signal_pending(current))
  3449					break;
  3450	
  3451				pre_used = pages_used;
  3452				pages_reclaimed = shrink_page_cache_memcg(gfp_mask, memcg, pages_used - goal_pages_used);
  3453	
  3454				if (limit_retry_times == 0)
  3455					goto next_shrink;
  3456	
  3457				if (pages_reclaimed == 0) {
  3458					congestion_wait(BLK_RW_ASYNC, HZ/10);
  3459					retry_times++;
  3460				} else
  3461					retry_times = 0;
  3462	
  3463				if (retry_times > limit_retry_times) {
  3464					memcg_memory_event(memcg, MEMCG_PAGECACHE_OOM);
  3465					mem_cgroup_out_of_memory(memcg, GFP_KERNEL, 0);
  3466					break;
  3467				}
  3468	
  3469	next_shrink:
  3470				pages_used = page_counter_read(&memcg->pagecache);
  3471				cond_resched();
  3472			}
  3473		}
  3474	}
  3475	
  3476	static u64 pagecache_reclaim_ratio_read(struct cgroup_subsys_state *css,
  3477						struct cftype *cft)
  3478	{
  3479		struct mem_cgroup *memcg = mem_cgroup_from_css(css);
  3480	
  3481		return memcg->pagecache_reclaim_ratio;
  3482	}
  3483	
  3484	static ssize_t pagecache_reclaim_ratio_write(struct kernfs_open_file *of,
  3485					char *buf, size_t nbytes, loff_t off)
  3486	{
  3487		struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
  3488		u64 reclaim_ratio;
  3489		int ret;
  3490		unsigned long nr_pages;
  3491	
  3492		buf = strstrip(buf);
  3493		if (!buf)
  3494			return -EINVAL;
  3495	
  3496		ret = kstrtou64(buf, 0, &reclaim_ratio);
  3497		if (ret)
  3498			return ret;
  3499	
  3500		if ((reclaim_ratio > 0) && (reclaim_ratio < 100)) {
  3501			memcg->pagecache_reclaim_ratio = reclaim_ratio;
  3502			return nbytes;
  3503		} else if (reclaim_ratio == 100) {
  3504			nr_pages = page_counter_read(&memcg->pagecache);
  3505			shrink_page_cache_memcg(GFP_KERNEL, memcg, nr_pages);
  3506			return nbytes;
  3507		}
  3508	
  3509		return -EINVAL;
  3510	}
  3511	
  3512	static u64 pagecache_current_read(struct cgroup_subsys_state *css,
  3513					struct cftype *cft)
  3514	{
  3515		struct mem_cgroup *memcg = mem_cgroup_from_css(css);
  3516	
  3517		return (u64)page_counter_read(&memcg->pagecache) * PAGE_SIZE;
  3518	}
  3519	
  3520	static u64 memory_pagecache_max_read(struct cgroup_subsys_state *css,
  3521					struct cftype *cft)
  3522	{
  3523		struct mem_cgroup *memcg = mem_cgroup_from_css(css);
  3524	
  3525		return memcg->pagecache_max_ratio;
  3526	}
  3527	
> 3528	unsigned long mem_cgroup_pagecache_get_reclaim_pages(struct mem_cgroup *memcg)
  3529	{
  3530		unsigned long goal_pages_used, pages_used, pages_max;
  3531	
  3532		if ((!memcg) || (mem_cgroup_is_root(memcg)))
  3533			return 0;
  3534	
  3535		pages_max = READ_ONCE(memcg->pagecache.max);
  3536		if (pages_max == PAGE_COUNTER_MAX)
  3537			return 0;
  3538	
  3539		goal_pages_used = (100 - READ_ONCE(memcg->pagecache_reclaim_ratio)) * pages_max / 100;
  3540		goal_pages_used = max_t(unsigned long, MIN_PAGECACHE_PAGES, goal_pages_used);
  3541		pages_used = page_counter_read(&memcg->pagecache);
  3542	
  3543		return pages_used > pages_max ? pages_used - goal_pages_used : 0;
  3544	}
  3545	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-02-22 23:54 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-22 23:52 mm/memcontrol.c:3528:15: warning: no previous prototype for function 'mem_cgroup_pagecache_get_reclaim_pages' kernel test robot

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.