From: Hugh Dickins objrmap page_convert_anon was missing an unlock and an upsem. 25-akpm/mm/rmap.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) diff -puN mm/rmap.c~hugh-05-page_convert_anon-unlocking mm/rmap.c --- 25/mm/rmap.c~hugh-05-page_convert_anon-unlocking Tue Mar 25 18:34:49 2003 +++ 25-akpm/mm/rmap.c Tue Mar 25 18:34:49 2003 @@ -819,6 +819,7 @@ retry: */ if (mapcount < page->pte.mapcount) { pte_chain_unlock(page); + up(&mapping->i_shared_sem); goto retry; } else if ((mapcount > page->pte.mapcount) && (mapcount > 1)) { mapcount = page->pte.mapcount; @@ -834,7 +835,7 @@ retry: SetPageAnon(page); if (mapcount == 0) - goto out; + goto out_unlock; else if (mapcount == 1) { SetPageDirect(page); page->pte.direct = 0; _