[linux-mm-cc] [PATCH 01/12] clean up initialization
IKEDA Munehiro
m-ikeda at ds.jp.nec.com
Fri Jul 20 06:44:41 EDT 2007
This is code clean up patch for initialization part.
This tries to make fs_backed and anon ccache procedures
as symmetric as possible for readabiliby and maintenanceability.
Signed-off-by: IKEDA, Munehiro <m-ikeda at ds.jp.nec.com>
---
include/linux/ccache.h | 3 +--
mm/ccache.c | 44 +++++++++++++++++++++++++++++++++-----------
mm/swapfile.c | 6 ++----
3 files changed, 36 insertions(+), 17 deletions(-)
diff --git a/include/linux/ccache.h b/include/linux/ccache.h
index 8aee787..31e3b49 100644
--- a/include/linux/ccache.h
+++ b/include/linux/ccache.h
@@ -138,9 +138,8 @@ static inline void wait_on_chunk_head(unsigned long *flags)
#endif
}
-extern int init_ccache(void);
extern int is_page_in_virt_swap(struct page *page);
-extern int set_anon_cc_size(unsigned long size);
+extern int init_virt_swap(unsigned long size);
extern int should_add_to_ccache(struct page *page);
extern int cc_writepage(struct page *page);
extern struct page* handle_ccache_fault(struct chunk_head *ch,
diff --git a/mm/ccache.c b/mm/ccache.c
index 2d20b2c..12ebbd5 100644
--- a/mm/ccache.c
+++ b/mm/ccache.c
@@ -408,7 +408,7 @@ out:
return len;
}
-int init_ccache(void)
+static int init_ccache(void)
{
if (anon_cc_started || fs_backed_cc_started) return 0;
@@ -442,6 +442,24 @@ int init_ccache(void)
return 0;
}
+static int init_anon_ccache(unsigned long num)
+{
+ if (anon_cc_started)
+ return 0;
+
+ init_ccache();
+ return init_virt_swap(num);
+}
+
+static int init_fs_backed_ccache(unsigned long num)
+{
+ if (fs_backed_cc_started)
+ return 0;
+
+ init_ccache();
+ return 0;
+}
+
int sysctl_max_anon_cc_size(ctl_table *table, int write,
struct file *file, void __user *buffer, size_t *length, loff_t *ppos)
{
@@ -461,9 +479,13 @@ int sysctl_max_anon_cc_size(ctl_table *table, int write,
proc_doulongvec_minmax(table, write, file, buffer, length, ppos);
if (!write)
goto out;
- ret = set_anon_cc_size(max_anon_cc_size);
- if (ret)
+
+ ret = init_anon_ccache(max_anon_cc_size);
+ if (ret) {
+ CC_INFO("Error Initializing anon ccache");
goto out;
+ }
+
CC_INFO("Max anon ccache size: %lu pages", max_anon_cc_size);
anon_cc_started=1;
out:
@@ -490,15 +512,14 @@ int sysctl_max_fs_backed_cc_size(ctl_table *table, int write,
if (!write)
goto out;
- ret = init_ccache();
+ ret = init_fs_backed_ccache(max_fs_backed_cc_size);
if (ret) {
- CC_INFO("Error Initializing ccache");
+ CC_INFO("Error Initializing fs_backed ccache");
goto out;
}
CC_INFO("Max filesystem backed ccache size: %lu pages\n",
max_fs_backed_cc_size);
- atomic_set(&fs_backed_cc_size, 0);
fs_backed_cc_started = 1;
out:
return ret;
@@ -672,7 +693,9 @@ int cc_writepage(struct page *page)
if (page_count(page) != 2) {
CC_DEBUG2("(start) Page count not 2 (%d)"
"flags=0x%08lx", page_count(page), page->flags);
- if (!PageSwapCache(page))
+ if (PageSwapCache(page))
+ atomic_dec(&anon_cc_size);
+ else
atomic_dec(&fs_backed_cc_size);
return -EBUSY;
}
@@ -764,9 +787,6 @@ int cc_writepage(struct page *page)
radix_tree_replace_slot((void **)slot, (void *)ch);
CC_DEBUG2("after set slot");
- if (PageSwapCache(page))
- atomic_inc(&anon_cc_size);
-
/* or else it will be bad_page() when freed */
page->mapping = NULL;
ClearPageDirty(page);
@@ -793,7 +813,9 @@ out_locked:
write_unlock_irq(&mapping->tree_lock);
CC_DEBUG2("in out_locked: after WUQ");
out:
- if (!PageSwapCache(page))
+ if (PageSwapCache(page))
+ atomic_dec(&anon_cc_size);
+ else
atomic_dec(&fs_backed_cc_size);
if (ch)
free_chunk_head(ch);
diff --git a/mm/swapfile.c b/mm/swapfile.c
index f2df6b2..c94a56f 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -1451,7 +1451,7 @@ int is_page_in_virt_swap(struct page *page)
return 0;
}
-int set_anon_cc_size(unsigned long num_pages)
+int init_virt_swap(unsigned long num_pages)
{
int i, error, prev;
unsigned int type;
@@ -1459,8 +1459,6 @@ int set_anon_cc_size(unsigned long num_pages)
struct swap_info_struct *p;
struct swap_extent *new_se;
- init_ccache();
-
error=0;
spin_lock(&swap_lock);
p = swap_info;
@@ -1542,7 +1540,7 @@ out:
return error;
}
-EXPORT_SYMBOL(set_anon_cc_size);
+EXPORT_SYMBOL(init_virt_swap);
/*
* Written 01/25/92 by Simmule Turner, heavily changed by Linus.
--
1.4.4.4
More information about the linux-mm-cc
mailing list