diff options
Diffstat (limited to 'mm/oom_kill.c')
-rw-r--r-- | mm/oom_kill.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 7c122faa05c5..2958fd8e7c9a 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c | |||
@@ -152,7 +152,7 @@ struct task_struct *find_lock_task_mm(struct task_struct *p) | |||
152 | 152 | ||
153 | /* return true if the task is not adequate as candidate victim task. */ | 153 | /* return true if the task is not adequate as candidate victim task. */ |
154 | static bool oom_unkillable_task(struct task_struct *p, | 154 | static bool oom_unkillable_task(struct task_struct *p, |
155 | const struct mem_cgroup *mem, const nodemask_t *nodemask) | 155 | const struct mem_cgroup *memcg, const nodemask_t *nodemask) |
156 | { | 156 | { |
157 | if (is_global_init(p)) | 157 | if (is_global_init(p)) |
158 | return true; | 158 | return true; |
@@ -160,7 +160,7 @@ static bool oom_unkillable_task(struct task_struct *p, | |||
160 | return true; | 160 | return true; |
161 | 161 | ||
162 | /* When mem_cgroup_out_of_memory() and p is not member of the group */ | 162 | /* When mem_cgroup_out_of_memory() and p is not member of the group */ |
163 | if (mem && !task_in_mem_cgroup(p, mem)) | 163 | if (memcg && !task_in_mem_cgroup(p, memcg)) |
164 | return true; | 164 | return true; |
165 | 165 | ||
166 | /* p may not have freeable memory in nodemask */ | 166 | /* p may not have freeable memory in nodemask */ |
@@ -179,12 +179,12 @@ static bool oom_unkillable_task(struct task_struct *p, | |||
179 | * predictable as possible. The goal is to return the highest value for the | 179 | * predictable as possible. The goal is to return the highest value for the |
180 | * task consuming the most memory to avoid subsequent oom failures. | 180 | * task consuming the most memory to avoid subsequent oom failures. |
181 | */ | 181 | */ |
182 | unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *mem, | 182 | unsigned int oom_badness(struct task_struct *p, struct mem_cgroup *memcg, |
183 | const nodemask_t *nodemask, unsigned long totalpages) | 183 | const nodemask_t *nodemask, unsigned long totalpages) |
184 | { | 184 | { |
185 | long points; | 185 | long points; |
186 | 186 | ||
187 | if (oom_unkillable_task(p, mem, nodemask)) | 187 | if (oom_unkillable_task(p, memcg, nodemask)) |
188 | return 0; | 188 | return 0; |
189 | 189 | ||
190 | p = find_lock_task_mm(p); | 190 | p = find_lock_task_mm(p); |
@@ -308,7 +308,7 @@ static enum oom_constraint constrained_alloc(struct zonelist *zonelist, | |||
308 | * (not docbooked, we don't want this one cluttering up the manual) | 308 | * (not docbooked, we don't want this one cluttering up the manual) |
309 | */ | 309 | */ |
310 | static struct task_struct *select_bad_process(unsigned int *ppoints, | 310 | static struct task_struct *select_bad_process(unsigned int *ppoints, |
311 | unsigned long totalpages, struct mem_cgroup *mem, | 311 | unsigned long totalpages, struct mem_cgroup *memcg, |
312 | const nodemask_t *nodemask) | 312 | const nodemask_t *nodemask) |
313 | { | 313 | { |
314 | struct task_struct *g, *p; | 314 | struct task_struct *g, *p; |
@@ -320,7 +320,7 @@ static struct task_struct *select_bad_process(unsigned int *ppoints, | |||
320 | 320 | ||
321 | if (p->exit_state) | 321 | if (p->exit_state) |
322 | continue; | 322 | continue; |
323 | if (oom_unkillable_task(p, mem, nodemask)) | 323 | if (oom_unkillable_task(p, memcg, nodemask)) |
324 | continue; | 324 | continue; |
325 | 325 | ||
326 | /* | 326 | /* |
@@ -364,7 +364,7 @@ static struct task_struct *select_bad_process(unsigned int *ppoints, | |||
364 | } | 364 | } |
365 | } | 365 | } |
366 | 366 | ||
367 | points = oom_badness(p, mem, nodemask, totalpages); | 367 | points = oom_badness(p, memcg, nodemask, totalpages); |
368 | if (points > *ppoints) { | 368 | if (points > *ppoints) { |
369 | chosen = p; | 369 | chosen = p; |
370 | *ppoints = points; | 370 | *ppoints = points; |
@@ -387,14 +387,14 @@ static struct task_struct *select_bad_process(unsigned int *ppoints, | |||
387 | * | 387 | * |
388 | * Call with tasklist_lock read-locked. | 388 | * Call with tasklist_lock read-locked. |
389 | */ | 389 | */ |
390 | static void dump_tasks(const struct mem_cgroup *mem, const nodemask_t *nodemask) | 390 | static void dump_tasks(const struct mem_cgroup *memcg, const nodemask_t *nodemask) |
391 | { | 391 | { |
392 | struct task_struct *p; | 392 | struct task_struct *p; |
393 | struct task_struct *task; | 393 | struct task_struct *task; |
394 | 394 | ||
395 | pr_info("[ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name\n"); | 395 | pr_info("[ pid ] uid tgid total_vm rss cpu oom_adj oom_score_adj name\n"); |
396 | for_each_process(p) { | 396 | for_each_process(p) { |
397 | if (oom_unkillable_task(p, mem, nodemask)) | 397 | if (oom_unkillable_task(p, memcg, nodemask)) |
398 | continue; | 398 | continue; |
399 | 399 | ||
400 | task = find_lock_task_mm(p); | 400 | task = find_lock_task_mm(p); |
@@ -417,7 +417,7 @@ static void dump_tasks(const struct mem_cgroup *mem, const nodemask_t *nodemask) | |||
417 | } | 417 | } |
418 | 418 | ||
419 | static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order, | 419 | static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order, |
420 | struct mem_cgroup *mem, const nodemask_t *nodemask) | 420 | struct mem_cgroup *memcg, const nodemask_t *nodemask) |
421 | { | 421 | { |
422 | task_lock(current); | 422 | task_lock(current); |
423 | pr_warning("%s invoked oom-killer: gfp_mask=0x%x, order=%d, " | 423 | pr_warning("%s invoked oom-killer: gfp_mask=0x%x, order=%d, " |
@@ -427,14 +427,14 @@ static void dump_header(struct task_struct *p, gfp_t gfp_mask, int order, | |||
427 | cpuset_print_task_mems_allowed(current); | 427 | cpuset_print_task_mems_allowed(current); |
428 | task_unlock(current); | 428 | task_unlock(current); |
429 | dump_stack(); | 429 | dump_stack(); |
430 | mem_cgroup_print_oom_info(mem, p); | 430 | mem_cgroup_print_oom_info(memcg, p); |
431 | show_mem(SHOW_MEM_FILTER_NODES); | 431 | show_mem(SHOW_MEM_FILTER_NODES); |
432 | if (sysctl_oom_dump_tasks) | 432 | if (sysctl_oom_dump_tasks) |
433 | dump_tasks(mem, nodemask); | 433 | dump_tasks(memcg, nodemask); |
434 | } | 434 | } |
435 | 435 | ||
436 | #define K(x) ((x) << (PAGE_SHIFT-10)) | 436 | #define K(x) ((x) << (PAGE_SHIFT-10)) |
437 | static int oom_kill_task(struct task_struct *p, struct mem_cgroup *mem) | 437 | static int oom_kill_task(struct task_struct *p) |
438 | { | 438 | { |
439 | struct task_struct *q; | 439 | struct task_struct *q; |
440 | struct mm_struct *mm; | 440 | struct mm_struct *mm; |
@@ -484,7 +484,7 @@ static int oom_kill_task(struct task_struct *p, struct mem_cgroup *mem) | |||
484 | 484 | ||
485 | static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, | 485 | static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, |
486 | unsigned int points, unsigned long totalpages, | 486 | unsigned int points, unsigned long totalpages, |
487 | struct mem_cgroup *mem, nodemask_t *nodemask, | 487 | struct mem_cgroup *memcg, nodemask_t *nodemask, |
488 | const char *message) | 488 | const char *message) |
489 | { | 489 | { |
490 | struct task_struct *victim = p; | 490 | struct task_struct *victim = p; |
@@ -493,7 +493,7 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, | |||
493 | unsigned int victim_points = 0; | 493 | unsigned int victim_points = 0; |
494 | 494 | ||
495 | if (printk_ratelimit()) | 495 | if (printk_ratelimit()) |
496 | dump_header(p, gfp_mask, order, mem, nodemask); | 496 | dump_header(p, gfp_mask, order, memcg, nodemask); |
497 | 497 | ||
498 | /* | 498 | /* |
499 | * If the task is already exiting, don't alarm the sysadmin or kill | 499 | * If the task is already exiting, don't alarm the sysadmin or kill |
@@ -524,7 +524,7 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, | |||
524 | /* | 524 | /* |
525 | * oom_badness() returns 0 if the thread is unkillable | 525 | * oom_badness() returns 0 if the thread is unkillable |
526 | */ | 526 | */ |
527 | child_points = oom_badness(child, mem, nodemask, | 527 | child_points = oom_badness(child, memcg, nodemask, |
528 | totalpages); | 528 | totalpages); |
529 | if (child_points > victim_points) { | 529 | if (child_points > victim_points) { |
530 | victim = child; | 530 | victim = child; |
@@ -533,7 +533,7 @@ static int oom_kill_process(struct task_struct *p, gfp_t gfp_mask, int order, | |||
533 | } | 533 | } |
534 | } while_each_thread(p, t); | 534 | } while_each_thread(p, t); |
535 | 535 | ||
536 | return oom_kill_task(victim, mem); | 536 | return oom_kill_task(victim); |
537 | } | 537 | } |
538 | 538 | ||
539 | /* | 539 | /* |
@@ -561,7 +561,7 @@ static void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask, | |||
561 | } | 561 | } |
562 | 562 | ||
563 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR | 563 | #ifdef CONFIG_CGROUP_MEM_RES_CTLR |
564 | void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask) | 564 | void mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask) |
565 | { | 565 | { |
566 | unsigned long limit; | 566 | unsigned long limit; |
567 | unsigned int points = 0; | 567 | unsigned int points = 0; |
@@ -578,14 +578,14 @@ void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask) | |||
578 | } | 578 | } |
579 | 579 | ||
580 | check_panic_on_oom(CONSTRAINT_MEMCG, gfp_mask, 0, NULL); | 580 | check_panic_on_oom(CONSTRAINT_MEMCG, gfp_mask, 0, NULL); |
581 | limit = mem_cgroup_get_limit(mem) >> PAGE_SHIFT; | 581 | limit = mem_cgroup_get_limit(memcg) >> PAGE_SHIFT; |
582 | read_lock(&tasklist_lock); | 582 | read_lock(&tasklist_lock); |
583 | retry: | 583 | retry: |
584 | p = select_bad_process(&points, limit, mem, NULL); | 584 | p = select_bad_process(&points, limit, memcg, NULL); |
585 | if (!p || PTR_ERR(p) == -1UL) | 585 | if (!p || PTR_ERR(p) == -1UL) |
586 | goto out; | 586 | goto out; |
587 | 587 | ||
588 | if (oom_kill_process(p, gfp_mask, 0, points, limit, mem, NULL, | 588 | if (oom_kill_process(p, gfp_mask, 0, points, limit, memcg, NULL, |
589 | "Memory cgroup out of memory")) | 589 | "Memory cgroup out of memory")) |
590 | goto retry; | 590 | goto retry; |
591 | out: | 591 | out: |