From: Hugh Dickins <hugh@veritas.com>

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;

_