diff options
Diffstat (limited to 'mm/swapfile.c')
-rw-r--r-- | mm/swapfile.c | 21 |
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 | ||
1331 | int __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 | |||
1331 | static int swap_swapcount(struct swap_info_struct *si, swp_entry_t entry) | 1338 | static 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 | ||
3465 | struct swap_info_struct *swp_swap_info(swp_entry_t entry) | ||
3466 | { | ||
3467 | return swap_info[swp_type(entry)]; | ||
3468 | } | ||
3469 | |||
3455 | struct swap_info_struct *page_swap_info(struct page *page) | 3470 | struct 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 | */ |
3464 | struct address_space *__page_file_mapping(struct page *page) | 3479 | struct 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 | } |
3469 | EXPORT_SYMBOL_GPL(__page_file_mapping); | 3483 | EXPORT_SYMBOL_GPL(__page_file_mapping); |
@@ -3471,7 +3485,6 @@ EXPORT_SYMBOL_GPL(__page_file_mapping); | |||
3471 | pgoff_t __page_file_index(struct page *page) | 3485 | pgoff_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 | } |
3477 | EXPORT_SYMBOL_GPL(__page_file_index); | 3490 | EXPORT_SYMBOL_GPL(__page_file_index); |