--- pre-2.3.11-1/ipc/shm.c Tue Jul 13 02:02:40 1999 +++ pre-2.3.11-1_shm/ipc/shm.c Tue Jul 13 14:23:36 1999 @@ -649,13 +649,12 @@ } #endif + lock_kernel(); pte = __pte(shp->shm_pages[idx]); if (!pte_present(pte)) { unsigned long page = get_free_page(GFP_USER); - if (!page) { - oom(current); - return 0; - } + if (!page) + goto oom; pte = __pte(shp->shm_pages[idx]); if (pte_present(pte)) { free_page (page); /* doesn't sleep */ @@ -678,9 +677,14 @@ --current->maj_flt; /* was incremented in do_no_page */ done: /* pte_val(pte) == shp->shm_pages[idx] */ + unlock_kernel(); current->min_flt++; get_page(mem_map + MAP_NR(pte_page(pte))); return pte_page(pte); +oom: + unlock_kernel(); + oom(current); + return 0; } /*