On Wed, Jun 02, 2010 at 10:54:01PM +0900, KOSAKI Motohiro wrote: | > > @@ -291,9 +309,10 @@ static struct task_struct *select_bad_process(unsigned long *ppoints, | > > * Otherwise we could get an easy OOM deadlock. | > > */ | > > if (p->flags & PF_EXITING) { | > > - if (p != current) | > > + if (p != current) { | > > + boost_dying_task_prio(p, mem); | > > return ERR_PTR(-1UL); | > > - | > > + } | > > chosen = p; | > > *ppoints = ULONG_MAX; | > > } | > | > This has the potential to actually make it harder to free memory if p is | > waiting to acquire a writelock on mm->mmap_sem in the exit path while the | > thread holding mm->mmap_sem is trying to run. | | if p is waiting, changing prio have no effect. It continue tol wait to release mmap_sem. Ok, that was not a good idea after all :) But I understand the !rt_task(p) test is necessary to avoid decrementing the priority of an eventual RT task selected to die. Though it may also be a corner case in badness(). Luis -- [ Luis Claudio R. Goncalves Bass - Gospel - RT ] [ Fingerprint: 4FDD B8C4 3C59 34BD 8BE9 2696 7203 D980 A448 C8F8 ] -- 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>