aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorNick Piggin <nickpiggin@yahoo.com.au>2004-09-17 19:35:55 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-09-17 19:35:55 -0700
commitdb119cd45e34f7b37f6beec19602654d6d5d4954 (patch)
tree50eaf16713486b7e34c31f59fb209b42200182b2 /mm
parenta35ed119e775f6a8c83c882c75e6d72f6347b051 (diff)
downloadhistory-db119cd45e34f7b37f6beec19602654d6d5d4954.tar.gz
[PATCH] fix missing unlock_page in mm/rmap.c
A required unlock_page will be missed in a very rare (but possible) race condition. Acked by Hugh, who says: It'll be hard to hit because of the additional page_mapped test above, with truncate unmapping ptes from mms before it advances to removing pages from cache; but nothing to prevent it happening. Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/rmap.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/mm/rmap.c b/mm/rmap.c
index 19c159bf3c9831..f1c40c722fe6f8 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -405,8 +405,9 @@ int page_referenced(struct page *page, int is_locked)
referenced += page_referenced_file(page);
else if (TestSetPageLocked(page))
referenced++;
- else if (page->mapping) {
- referenced += page_referenced_file(page);
+ else {
+ if (page->mapping)
+ referenced += page_referenced_file(page);
unlock_page(page);
}
}