mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02:00 
			
		
		
		
	oom: thaw threads if oom killed thread is frozen before deferring
If a thread has been oom killed and is frozen, thaw it before returning to the page allocator. Otherwise, it can stay frozen indefinitely and no memory will be freed. Signed-off-by: David Rientjes <rientjes@google.com> Reported-by: Konstantin Khlebnikov <khlebnikov@openvz.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Acked-by: Michal Hocko <mhocko@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									d08c429b06
								
							
						
					
					
						commit
						f660daac47
					
				
					 1 changed files with 5 additions and 1 deletions
				
			
		|  | @ -32,6 +32,7 @@ | ||||||
| #include <linux/mempolicy.h> | #include <linux/mempolicy.h> | ||||||
| #include <linux/security.h> | #include <linux/security.h> | ||||||
| #include <linux/ptrace.h> | #include <linux/ptrace.h> | ||||||
|  | #include <linux/freezer.h> | ||||||
| 
 | 
 | ||||||
| int sysctl_panic_on_oom; | int sysctl_panic_on_oom; | ||||||
| int sysctl_oom_kill_allocating_task; | int sysctl_oom_kill_allocating_task; | ||||||
|  | @ -317,8 +318,11 @@ static struct task_struct *select_bad_process(unsigned int *ppoints, | ||||||
| 		 * blocked waiting for another task which itself is waiting | 		 * blocked waiting for another task which itself is waiting | ||||||
| 		 * for memory. Is there a better alternative? | 		 * for memory. Is there a better alternative? | ||||||
| 		 */ | 		 */ | ||||||
| 		if (test_tsk_thread_flag(p, TIF_MEMDIE)) | 		if (test_tsk_thread_flag(p, TIF_MEMDIE)) { | ||||||
|  | 			if (unlikely(frozen(p))) | ||||||
|  | 				thaw_process(p); | ||||||
| 			return ERR_PTR(-1UL); | 			return ERR_PTR(-1UL); | ||||||
|  | 		} | ||||||
| 		if (!p->mm) | 		if (!p->mm) | ||||||
| 			continue; | 			continue; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 David Rientjes
						David Rientjes