aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/swapfile.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 71373d03fcee..f89af5ba2eb2 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -33,6 +33,7 @@
33#include <linux/oom.h> 33#include <linux/oom.h>
34#include <linux/frontswap.h> 34#include <linux/frontswap.h>
35#include <linux/swapfile.h> 35#include <linux/swapfile.h>
36#include <linux/export.h>
36 37
37#include <asm/pgtable.h> 38#include <asm/pgtable.h>
38#include <asm/tlbflush.h> 39#include <asm/tlbflush.h>
@@ -2285,6 +2286,31 @@ int swapcache_prepare(swp_entry_t entry)
2285 return __swap_duplicate(entry, SWAP_HAS_CACHE); 2286 return __swap_duplicate(entry, SWAP_HAS_CACHE);
2286} 2287}
2287 2288
2289struct swap_info_struct *page_swap_info(struct page *page)
2290{
2291 swp_entry_t swap = { .val = page_private(page) };
2292 BUG_ON(!PageSwapCache(page));
2293 return swap_info[swp_type(swap)];
2294}
2295
2296/*
2297 * out-of-line __page_file_ methods to avoid include hell.
2298 */
2299struct address_space *__page_file_mapping(struct page *page)
2300{
2301 VM_BUG_ON(!PageSwapCache(page));
2302 return page_swap_info(page)->swap_file->f_mapping;
2303}
2304EXPORT_SYMBOL_GPL(__page_file_mapping);
2305
2306pgoff_t __page_file_index(struct page *page)
2307{
2308 swp_entry_t swap = { .val = page_private(page) };
2309 VM_BUG_ON(!PageSwapCache(page));
2310 return swp_offset(swap);
2311}
2312EXPORT_SYMBOL_GPL(__page_file_index);
2313
2288/* 2314/*
2289 * add_swap_count_continuation - called when a swap count is duplicated 2315 * add_swap_count_continuation - called when a swap count is duplicated
2290 * beyond SWAP_MAP_MAX, it allocates a new page and links that to the entry's 2316 * beyond SWAP_MAP_MAX, it allocates a new page and links that to the entry's