summaryrefslogtreecommitdiffstats
path: root/mm/swapfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/swapfile.c')
-rw-r--r--mm/swapfile.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c
index e47a21e64764..3074b02eaa09 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -1328,6 +1328,13 @@ int page_swapcount(struct page *page)
1328 return count; 1328 return count;
1329} 1329}
1330 1330
1331int __swap_count(struct swap_info_struct *si, swp_entry_t entry)
1332{
1333 pgoff_t offset = swp_offset(entry);
1334
1335 return swap_count(si->swap_map[offset]);
1336}
1337
1331static int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry) 1338static int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry)
1332{ 1339{
1333 int count = 0; 1340 int count = 0;
@@ -3169,6 +3176,9 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
3169 if (bdi_cap_stable_pages_required(inode_to_bdi(inode))) 3176 if (bdi_cap_stable_pages_required(inode_to_bdi(inode)))
3170 p->flags |= SWP_STABLE_WRITES; 3177 p->flags |= SWP_STABLE_WRITES;
3171 3178
3179 if (bdi_cap_synchronous_io(inode_to_bdi(inode)))
3180 p->flags |= SWP_SYNCHRONOUS_IO;
3181
3172 if (p->bdev && blk_queue_nonrot(bdev_get_queue(p->bdev))) { 3182 if (p->bdev && blk_queue_nonrot(bdev_get_queue(p->bdev))) {
3173 int cpu; 3183 int cpu;
3174 unsigned long ci, nr_cluster; 3184 unsigned long ci, nr_cluster;
@@ -3452,10 +3462,15 @@ int swapcache_prepare(swp_entry_t entry)
3452 return __swap_duplicate(entry, SWAP_HAS_CACHE); 3462 return __swap_duplicate(entry, SWAP_HAS_CACHE);
3453} 3463}
3454 3464
3465struct swap_info_struct *swp_swap_info(swp_entry_t entry)
3466{
3467 return swap_info[swp_type(entry)];
3468}
3469
3455struct swap_info_struct *page_swap_info(struct page *page) 3470struct swap_info_struct *page_swap_info(struct page *page)
3456{ 3471{
3457 swp_entry_t swap = { .val = page_private(page) }; 3472 swp_entry_t entry = { .val = page_private(page) };
3458 return swap_info[swp_type(swap)]; 3473 return swp_swap_info(entry);
3459} 3474}
3460 3475
3461/* 3476/*
@@ -3463,7 +3478,6 @@ struct swap_info_struct *page_swap_info(struct page *page)
3463 */ 3478 */
3464struct address_space *__page_file_mapping(struct page *page) 3479struct address_space *__page_file_mapping(struct page *page)
3465{ 3480{
3466 VM_BUG_ON_PAGE(!PageSwapCache(page), page);
3467 return page_swap_info(page)->swap_file->f_mapping; 3481 return page_swap_info(page)->swap_file->f_mapping;
3468} 3482}
3469EXPORT_SYMBOL_GPL(__page_file_mapping); 3483EXPORT_SYMBOL_GPL(__page_file_mapping);
@@ -3471,7 +3485,6 @@ EXPORT_SYMBOL_GPL(__page_file_mapping);
3471pgoff_t __page_file_index(struct page *page) 3485pgoff_t __page_file_index(struct page *page)
3472{ 3486{
3473 swp_entry_t swap = { .val = page_private(page) }; 3487 swp_entry_t swap = { .val = page_private(page) };
3474 VM_BUG_ON_PAGE(!PageSwapCache(page), page);
3475 return swp_offset(swap); 3488 return swp_offset(swap);
3476} 3489}
3477EXPORT_SYMBOL_GPL(__page_file_index); 3490EXPORT_SYMBOL_GPL(__page_file_index);