[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