On Thu, 1 Apr 2010 12:44:31 -0700 (PDT) David Rientjes <rientjes@xxxxxxxxxx> wrote: > It's possible to livelock the page allocator if a thread has mm->mmap_sem and > fails to make forward progress because the oom killer selects another thread > sharing the same ->mm to kill that cannot exit until the semaphore is dropped. > > The oom killer will not kill multiple tasks at the same time; each oom killed > task must exit before another task may be killed. Thus, if one thread is > holding mm->mmap_sem and cannot allocate memory, all threads sharing the same > ->mm are blocked from exiting as well. In the oom kill case, that means the > thread holding mm->mmap_sem will never free additional memory since it cannot > get access to memory reserves and the thread that depends on it with access to > memory reserves cannot exit because it cannot acquire the semaphore. Thus, > the page allocators livelocks. > > When the oom killer is called and current happens to have a pending SIGKILL, > this patch automatically gives it access to memory reserves and returns. Upon > returning to the page allocator, its allocation will hopefully succeed so it > can quickly exit and free its memory. If not, the page allocator will fail > the allocation if it is not __GFP_NOFAIL. > > Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>