lkml.org 
[lkml]   [2002]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] rmap bugfix, try_to_unmap
Hi,

the following patch corrects a bug where rmap would continue
trying to swap out a page even after it failed on one pte,
which could result in leaked pte chains and a bug when exiting
applications which use mlock().

The bug was tracked down by Christian Ehrhardt, the reason
it wasn't found earlier was a subtlety in the code, so I've
taken the liberty of changing Christian's patch into something
more explicit, we shouldn't let this one happen again ;)

please apply,

Rik
--
Bravely reimplemented by the knights who say "NIH".

http://www.surriel.com/ http://distro.conectiva.com/


===== mm/rmap.c 1.7 vs edited =====
--- 1.7/mm/rmap.c Wed Jul 31 06:58:53 2002
+++ edited/mm/rmap.c Mon Aug 12 11:22:05 2002
@@ -328,7 +328,7 @@
case SWAP_SUCCESS:
/* Free the pte_chain struct. */
pte_chain_free(pc, prev_pc, page);
- break;
+ continue;
case SWAP_AGAIN:
/* Skip this pte, remembering status. */
prev_pc = pc;
@@ -336,12 +336,13 @@
continue;
case SWAP_FAIL:
ret = SWAP_FAIL;
- break;
+ goto give_up;
case SWAP_ERROR:
ret = SWAP_ERROR;
- break;
+ goto give_up;
}
}
+give_up:
/* Check whether we can convert to direct pte pointer */
pc = page->pte.chain;
if (pc && !pc->next) {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:27    [W:0.296 / U:0.212 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site