Hi chengkaitao, Thank you for the patch! Yet something to improve: [auto build test ERROR on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/chengkaitao/mm-memcontrol-protect-the-memory-in-cgroup-from-being-oom-killed/20221130-150440 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20221130070158.44221-1-chengkaitao%40didiglobal.com patch subject: [PATCH] mm: memcontrol: protect the memory in cgroup from being oom killed config: um-i386_defconfig compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/d2e2f936cb254b6976abddb53b9f46dfc9c9a134 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review chengkaitao/mm-memcontrol-protect-the-memory-in-cgroup-from-being-oom-killed/20221130-150440 git checkout d2e2f936cb254b6976abddb53b9f46dfc9c9a134 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=um SUBARCH=i386 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All errors (new ones prefixed by >>): ld: init/do_mounts.o: in function `update_parent_oom_protection': >> include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: init/do_mounts.o: in function `get_task_eoom_protect': >> include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: init/do_mounts.o: in function `is_root_oom_protect': >> include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: init/do_mounts.o: in function `mem_cgroup_scan_tasks_update_eoom': >> include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: arch/um/kernel/mem.o: in function `update_parent_oom_protection': >> include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: arch/um/kernel/mem.o: in function `get_task_eoom_protect': >> include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: arch/um/kernel/mem.o: in function `is_root_oom_protect': >> include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: arch/um/kernel/mem.o: in function `mem_cgroup_scan_tasks_update_eoom': >> include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: arch/um/kernel/process.o: in function `update_parent_oom_protection': >> include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: arch/um/kernel/process.o: in function `get_task_eoom_protect': >> include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: arch/um/kernel/process.o: in function `is_root_oom_protect': >> include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: arch/um/kernel/process.o: in function `mem_cgroup_scan_tasks_update_eoom': >> include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: arch/um/kernel/um_arch.o: in function `update_parent_oom_protection': arch/um/kernel/um_arch.c:528: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: arch/um/kernel/um_arch.o: in function `get_task_eoom_protect': >> include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: arch/um/kernel/um_arch.o: in function `is_root_oom_protect': >> include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: arch/um/kernel/um_arch.o: in function `mem_cgroup_scan_tasks_update_eoom': >> include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/fork.o: in function `update_parent_oom_protection': >> include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/fork.o: in function `get_task_eoom_protect': >> include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/fork.o: in function `is_root_oom_protect': >> include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/fork.o: in function `mem_cgroup_scan_tasks_update_eoom': >> include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/cpu.o: in function `update_parent_oom_protection': >> include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/cpu.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/cpu.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/cpu.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/sysctl.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/sysctl.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/sysctl.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/sysctl.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/sys.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/sys.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/sys.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/sys.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/umh.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/umh.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/umh.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/umh.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/pid.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/pid.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/pid.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/pid.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/task_work.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/task_work.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/task_work.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/task_work.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/reboot.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/reboot.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/reboot.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/reboot.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/kmod.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/kmod.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/kmod.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/kmod.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/sched/core.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/sched/core.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/sched/core.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/sched/core.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/sched/build_policy.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/sched/build_policy.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/sched/build_policy.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/sched/build_policy.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/power/main.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/power/main.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/power/main.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/power/main.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/power/process.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/power/process.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/power/process.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here ld: kernel/power/process.o: in function `mem_cgroup_scan_tasks_update_eoom': include/linux/memcontrol.h:1376: multiple definition of `mem_cgroup_scan_tasks_update_eoom'; init/main.o:include/linux/memcontrol.h:1376: first defined here ld: kernel/power/suspend.o: in function `update_parent_oom_protection': include/linux/memcontrol.h:1231: multiple definition of `update_parent_oom_protection'; init/main.o:include/linux/memcontrol.h:1231: first defined here ld: kernel/power/suspend.o: in function `get_task_eoom_protect': include/linux/memcontrol.h:1246: multiple definition of `get_task_eoom_protect'; init/main.o:include/linux/memcontrol.h:1246: first defined here ld: kernel/power/suspend.o: in function `is_root_oom_protect': include/linux/memcontrol.h:1251: multiple definition of `is_root_oom_protect'; init/main.o:include/linux/memcontrol.h:1251: first defined here vim +1231 include/linux/memcontrol.h 1227 1228 void update_parent_oom_protection(struct mem_cgroup *root, 1229 struct mem_cgroup *memcg) 1230 { > 1231 } 1232 1233 static inline bool mem_cgroup_below_low(struct mem_cgroup *memcg) 1234 { 1235 return false; 1236 } 1237 1238 static inline bool mem_cgroup_below_min(struct mem_cgroup *memcg) 1239 { 1240 return false; 1241 } 1242 1243 unsigned long get_task_eoom_protect(struct task_struct *p, long points) 1244 { 1245 return 0; > 1246 } 1247 1248 bool is_root_oom_protect(void) 1249 { 1250 return 0; > 1251 } 1252 1253 static inline int mem_cgroup_charge(struct folio *folio, 1254 struct mm_struct *mm, gfp_t gfp) 1255 { 1256 return 0; 1257 } 1258 1259 static inline int mem_cgroup_swapin_charge_folio(struct folio *folio, 1260 struct mm_struct *mm, gfp_t gfp, swp_entry_t entry) 1261 { 1262 return 0; 1263 } 1264 1265 static inline void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry) 1266 { 1267 } 1268 1269 static inline void mem_cgroup_uncharge(struct folio *folio) 1270 { 1271 } 1272 1273 static inline void mem_cgroup_uncharge_list(struct list_head *page_list) 1274 { 1275 } 1276 1277 static inline void mem_cgroup_migrate(struct folio *old, struct folio *new) 1278 { 1279 } 1280 1281 static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg, 1282 struct pglist_data *pgdat) 1283 { 1284 return &pgdat->__lruvec; 1285 } 1286 1287 static inline struct lruvec *folio_lruvec(struct folio *folio) 1288 { 1289 struct pglist_data *pgdat = folio_pgdat(folio); 1290 return &pgdat->__lruvec; 1291 } 1292 1293 static inline 1294 void lruvec_memcg_debug(struct lruvec *lruvec, struct folio *folio) 1295 { 1296 } 1297 1298 static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg) 1299 { 1300 return NULL; 1301 } 1302 1303 static inline bool mm_match_cgroup(struct mm_struct *mm, 1304 struct mem_cgroup *memcg) 1305 { 1306 return true; 1307 } 1308 1309 static inline struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm) 1310 { 1311 return NULL; 1312 } 1313 1314 static inline 1315 struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css) 1316 { 1317 return NULL; 1318 } 1319 1320 static inline void obj_cgroup_put(struct obj_cgroup *objcg) 1321 { 1322 } 1323 1324 static inline void mem_cgroup_put(struct mem_cgroup *memcg) 1325 { 1326 } 1327 1328 static inline struct lruvec *folio_lruvec_lock(struct folio *folio) 1329 { 1330 struct pglist_data *pgdat = folio_pgdat(folio); 1331 1332 spin_lock(&pgdat->__lruvec.lru_lock); 1333 return &pgdat->__lruvec; 1334 } 1335 1336 static inline struct lruvec *folio_lruvec_lock_irq(struct folio *folio) 1337 { 1338 struct pglist_data *pgdat = folio_pgdat(folio); 1339 1340 spin_lock_irq(&pgdat->__lruvec.lru_lock); 1341 return &pgdat->__lruvec; 1342 } 1343 1344 static inline struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio, 1345 unsigned long *flagsp) 1346 { 1347 struct pglist_data *pgdat = folio_pgdat(folio); 1348 1349 spin_lock_irqsave(&pgdat->__lruvec.lru_lock, *flagsp); 1350 return &pgdat->__lruvec; 1351 } 1352 1353 static inline struct mem_cgroup * 1354 mem_cgroup_iter(struct mem_cgroup *root, 1355 struct mem_cgroup *prev, 1356 struct mem_cgroup_reclaim_cookie *reclaim) 1357 { 1358 return NULL; 1359 } 1360 1361 static inline void mem_cgroup_iter_break(struct mem_cgroup *root, 1362 struct mem_cgroup *prev) 1363 { 1364 } 1365 1366 static inline int mem_cgroup_scan_tasks(struct mem_cgroup *memcg, 1367 int (*fn)(struct task_struct *, void *), void *arg) 1368 { 1369 return 0; 1370 } 1371 1372 int mem_cgroup_scan_tasks_update_eoom(struct mem_cgroup *memcg, 1373 int (*fn)(struct task_struct *, void *, int), void *arg) 1374 { 1375 return 0; > 1376 } 1377 -- 0-DAY CI Kernel Test Service https://01.org/lkp