linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [patch] fix uniprocessor lockup in page reclaim
@ 2002-08-19  2:51 Andrew Morton
  0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2002-08-19  2:51 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: linux-mm

I have a test_and_set_bit(PG_chainlock, page->flags) in page reclaim.  Which
works fine on SMP.  But on uniprocessor, we made pte_chain_unlock() a no-op,
so all pages end up with PG_chainlock set.  refill_inactive() cannot move any
pages onto  the inactive list and the machine dies.

The patch removes the test_and_set_bit optimisation in there and just uses
pte_chain_lock().  If we want that (dubious) optimisation back then let's do
it right and create pte_chain_trylock().

Patch is against recent 2.5.31+BK.  Please include for 2.5.32.


--- 2.5.31/mm/vmscan.c~pte-chain-fix	Sun Aug 18 19:38:15 2002
+++ 2.5.31-akpm/mm/vmscan.c	Sun Aug 18 19:38:37 2002
@@ -398,10 +398,7 @@ static /* inline */ void refill_inactive
 		page = list_entry(l_hold.prev, struct page, lru);
 		list_del(&page->lru);
 		if (page->pte.chain) {
-			if (test_and_set_bit(PG_chainlock, &page->flags)) {
-				list_add(&page->lru, &l_active);
-				continue;
-			}
+			pte_chain_lock(page);
 			if (page->pte.chain && page_referenced(page)) {
 				pte_chain_unlock(page);
 				list_add(&page->lru, &l_active);

.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-08-19  2:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-08-19  2:51 [patch] fix uniprocessor lockup in page reclaim Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox