[linux-mm-cc] [PATCH 03/12] clean up duplicated fault code

IKEDA Munehiro m-ikeda at ds.jp.nec.com
Fri Jul 20 06:44:51 EDT 2007


Code handling duplicated fault, which means code for a case
of trying to decompress a page which already decompressed was
implemented twice in handle_ccache_fault().
This patch merges them and defines a new function named
cleanup_dup_fault().


Signed-off-by: IKEDA, Munehiro <m-ikeda at ds.jp.nec.com>
---
 mm/ccache.c |   41 ++++++++++++++++++++---------------------
 1 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/mm/ccache.c b/mm/ccache.c
index 5cc0d25..c043581 100644
--- a/mm/ccache.c
+++ b/mm/ccache.c
@@ -827,6 +827,23 @@ out:
 	return ret;
 }
 
+static struct page *cleanup_dup_fault(struct chunk_head *ch,
+					 struct address_space *mapping)
+{
+	struct page *page;
+	
+	CC_DEBUG("page already decompressed");
+
+	read_lock_irq(&mapping->tree_lock);
+	page = radix_tree_lookup(&mapping->page_tree, ch->offset);
+	if (page)
+		page_cache_get(page);
+	read_unlock_irq(&mapping->tree_lock);
+	release_chunk_head(ch);
+	
+	return page;
+}
+
 struct page *handle_ccache_fault(struct chunk_head *ch,
 				struct address_space *mapping)
 {
@@ -844,14 +861,7 @@ struct page *handle_ccache_fault(struct chunk_head *ch,
 		if (!ch->chunk_list) {
 			bit_spin_unlock(PG_locked, &ch->flags);
 			CC_DEBUG("page already decompressed");
-			read_lock_irq(&mapping->tree_lock);
-			page = radix_tree_lookup(&mapping->page_tree,
-							ch->offset);
-			if (page)
-				page_cache_get(page);
-			read_unlock_irq(&mapping->tree_lock);
-			release_chunk_head(ch);
-			return page;
+			return cleanup_dup_fault(ch, mapping);
 		}
 
 		/* Decompress page and return it */
@@ -898,18 +908,7 @@ struct page *handle_ccache_fault(struct chunk_head *ch,
 	 */
 	wait_on_chunk_head(&ch->flags);
 	CC_DEBUG("after wait on chunk_head");
+	
+	return cleanup_dup_fault(ch, mapping);
 
-	read_lock_irq(&mapping->tree_lock);
-	/*
-	 * either slot has disappeared, or it
-	 * points to decompressed page or NULL
-	 */
-	page = radix_tree_lookup(&mapping->page_tree,
-			ch->offset);
-	if (page)
-		page_cache_get(page);
-	read_unlock_irq(&mapping->tree_lock);
-
-	release_chunk_head(ch);
-	return page;
 }
-- 
1.4.4.4






More information about the linux-mm-cc mailing list