aboutsummaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorTim Gardner <tim.gardner@canonical.com>2009-03-15 13:38:17 -0600
committerJohn Rigby <john.rigby@linaro.org>2011-07-25 14:34:39 -0600
commit66bfa34d7f723ebe1044d0ef6addbfe47ba58b7f (patch)
tree4b5f566438dd2e69832cce4d17383c9977736e34 /mm
parent89f08c5db5c7817e58360ee406669d4f74d68547 (diff)
UBUNTU: SAUCE: (no-up) swap: Add notify_swap_entry_free callback for compcache
Code is required for ubuntu/compcache Signed-off-by: Ben Collins <ben.collins@canonical.com> Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
Diffstat (limited to 'mm')
-rw-r--r--mm/swapfile.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c
index ff8dc1a18cb..5434ca75f3d 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -562,6 +562,12 @@ static unsigned char swap_entry_free(struct swap_info_struct *p,
disk->fops->swap_slot_free_notify(p->bdev, offset);
}
+ if (!swap_count(count)) {
+ mem_cgroup_uncharge_swap(entry);
+ if (p->notify_swap_entry_free_fn)
+ p->notify_swap_entry_free_fn(offset);
+ }
+
return usage;
}
@@ -2299,6 +2305,23 @@ int swapcache_prepare(swp_entry_t entry)
}
/*
+ * Sets callback for event when swap_map[offset] == 0
+ * i.e. page at this swap offset is not longer used.
+ *
+ * type: identifies swap file
+ * fn: callback function
+ */
+void set_notify_swap_entry_free(unsigned type, void (*fn) (unsigned long))
+{
+ struct swap_info_struct *sis;
+ sis = swap_info[type];
+ BUG_ON(!sis);
+ sis->notify_swap_entry_free_fn = fn;
+ return;
+}
+EXPORT_SYMBOL(set_notify_swap_entry_free);
+
+/*
* swap_lock prevents swap_map being freed. Don't grab an extra
* reference on the swaphandle, it doesn't matter if it becomes unused.
*/