--- 2.4.19pre7aa1/arch/alpha/mm/fault.c.~1~ Fri Apr 19 19:40:02 2002 +++ 2.4.19pre7aa1/arch/alpha/mm/fault.c Fri Apr 19 19:45:18 2002 @@ -147,13 +147,12 @@ * the fault. */ fault = handle_mm_fault(mm, vma, address, cause > 0); - up_read(&mm->mmap_sem); - if (fault < 0) goto out_of_memory; if (fault == 0) goto do_sigbus; + up_read(&mm->mmap_sem); return; /* @@ -198,9 +197,9 @@ if (current->pid == 1) { current->policy |= SCHED_YIELD; schedule(); - down_read(&mm->mmap_sem); goto survive; } + up_read(&mm->mmap_sem); printk(KERN_ALERT "VM: killing process %s(%d)\n", current->comm, current->pid); if (!user_mode(regs)) @@ -208,6 +207,7 @@ do_exit(SIGKILL); do_sigbus: + up_read(&mm->mmap_sem); /* * Send a sigbus, regardless of whether we were in kernel * or user mode. --- 2.4.19pre7aa1/arch/i386/mm/fault.c.~1~ Fri Apr 19 19:40:03 2002 +++ 2.4.19pre7aa1/arch/i386/mm/fault.c Fri Apr 19 19:43:08 2002 @@ -339,13 +339,12 @@ * us unable to handle the page fault gracefully. */ out_of_memory: - up_read(&mm->mmap_sem); if (tsk->pid == 1) { tsk->policy |= SCHED_YIELD; schedule(); - down_read(&mm->mmap_sem); goto survive; } + up_read(&mm->mmap_sem); printk("VM: killing process %s\n", tsk->comm); if (error_code & 4) do_exit(SIGKILL); --- 2.4.19pre7aa1/arch/ia64/mm/fault.c.~1~ Fri Apr 19 19:40:02 2002 +++ 2.4.19pre7aa1/arch/ia64/mm/fault.c Fri Apr 19 19:46:18 2002 @@ -194,13 +194,12 @@ return; out_of_memory: - up_read(&mm->mmap_sem); if (current->pid == 1) { current->policy |= SCHED_YIELD; schedule(); - down_read(&mm->mmap_sem); goto survive; } + up_read(&mm->mmap_sem); printk("VM: killing process %s\n", current->comm); if (user_mode(regs)) do_exit(SIGKILL); --- 2.4.19pre7aa1/arch/ppc/mm/fault.c.~1~ Fri Apr 19 19:40:02 2002 +++ 2.4.19pre7aa1/arch/ppc/mm/fault.c Fri Apr 19 19:43:43 2002 @@ -196,13 +196,12 @@ * us unable to handle the page fault gracefully. */ out_of_memory: - up_read(&mm->mmap_sem); if (current->pid == 1) { current->policy |= SCHED_YIELD; schedule(); - down_read(&mm->mmap_sem); goto survive; } + up_read(&mm->mmap_sem); printk("VM: killing process %s\n", current->comm); if (user_mode(regs)) do_exit(SIGKILL); --- 2.4.19pre7aa1/arch/s390/mm/fault.c.~1~ Fri Apr 19 19:40:02 2002 +++ 2.4.19pre7aa1/arch/s390/mm/fault.c Fri Apr 19 19:45:45 2002 @@ -288,13 +288,12 @@ * us unable to handle the page fault gracefully. */ out_of_memory: - up_read(&mm->mmap_sem); if (tsk->pid == 1) { tsk->policy |= SCHED_YIELD; schedule(); - down_read(&mm->mmap_sem); goto survive; } + up_read(&mm->mmap_sem); printk("VM: killing process %s\n", tsk->comm); if (regs->psw.mask & PSW_PROBLEM_STATE) do_exit(SIGKILL); --- 2.4.19pre7aa1/arch/s390x/mm/fault.c.~1~ Fri Apr 19 19:40:02 2002 +++ 2.4.19pre7aa1/arch/s390x/mm/fault.c Fri Apr 19 19:45:54 2002 @@ -288,13 +288,12 @@ * us unable to handle the page fault gracefully. */ out_of_memory: - up_read(&mm->mmap_sem); if (tsk->pid == 1) { tsk->policy |= SCHED_YIELD; schedule(); - down_read(&mm->mmap_sem); goto survive; } + up_read(&mm->mmap_sem); printk("VM: killing process %s\n", tsk->comm); if (regs->psw.mask & PSW_PROBLEM_STATE) do_exit(SIGKILL); --- 2.4.19pre7aa1/arch/x86_64/mm/fault.c.~1~ Fri Apr 19 19:40:08 2002 +++ 2.4.19pre7aa1/arch/x86_64/mm/fault.c Fri Apr 19 19:43:27 2002 @@ -263,13 +263,12 @@ * us unable to handle the page fault gracefully. */ out_of_memory: - up_read(&mm->mmap_sem); if (current->pid == 1) { tsk->policy |= SCHED_YIELD; schedule(); - down_read(&mm->mmap_sem); goto survive; } + up_read(&mm->mmap_sem); printk("VM: killing process %s\n", tsk->comm); if (error_code & 4) do_exit(SIGKILL);