aboutsummaryrefslogtreecommitdiff
path: root/mm/frontswap.c
diff options
context:
space:
mode:
authorSasha Levin <levinsasha928@gmail.com>2012-06-10 12:51:07 +0200
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-07-19 18:51:14 -0400
commit611edfed29f406eedf66030e0864b7d3fec23f21 (patch)
tree1143bbfb5cfce7a395a41af4f0bc0acbcd185e7c /mm/frontswap.c
parentf9f08103ebd634999abfccc8ff94985530f14d74 (diff)
mm: frontswap: split out function to clear a page out
Signed-off-by: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'mm/frontswap.c')
-rw-r--r--mm/frontswap.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/mm/frontswap.c b/mm/frontswap.c
index 7c26e899cec..7fb9538bec2 100644
--- a/mm/frontswap.c
+++ b/mm/frontswap.c
@@ -114,6 +114,12 @@ void __frontswap_init(unsigned type)
}
EXPORT_SYMBOL(__frontswap_init);
+static inline void __frontswap_clear(struct swap_info_struct *sis, pgoff_t offset)
+{
+ frontswap_clear(sis, offset);
+ atomic_dec(&sis->frontswap_pages);
+}
+
/*
* "Store" data from a page to frontswap and associate it with the page's
* swaptype and offset. Page must be locked and in the swap cache.
@@ -145,10 +151,8 @@ int __frontswap_store(struct page *page)
the (older) page from frontswap
*/
inc_frontswap_failed_stores();
- if (dup) {
- frontswap_clear(sis, offset);
- atomic_dec(&sis->frontswap_pages);
- }
+ if (dup)
+ __frontswap_clear(sis, offset);
}
if (frontswap_writethrough_enabled)
/* report failure so swap also writes to swap device */
@@ -191,8 +195,7 @@ void __frontswap_invalidate_page(unsigned type, pgoff_t offset)
BUG_ON(sis == NULL);
if (frontswap_test(sis, offset)) {
frontswap_ops.invalidate_page(type, offset);
- atomic_dec(&sis->frontswap_pages);
- frontswap_clear(sis, offset);
+ __frontswap_clear(sis, offset);
inc_frontswap_invalidates();
}
}