summaryrefslogtreecommitdiffstats
path: root/mm/swapfile.c
diff options
context:
space:
mode:
authorMinchan Kim <minchan@kernel.org>2017-07-06 18:37:21 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-07-06 19:24:31 -0400
commit75f6d6d29a40b5541f0f107201cf7dec134ad210 (patch)
tree5c9e1f349f9634f555d6c2946df2a1927f9680e1 /mm/swapfile.c
parent38d8b4e6bdc872f07a3149309ab01719c96f3894 (diff)
mm, THP, swap: unify swap slot free functions to put_swap_page
Now, get_swap_page takes struct page and allocates swap space according to page size(ie, normal or THP) so it would be more cleaner to introduce put_swap_page which is a counter function of get_swap_page. Then, it calls right swap slot free function depending on page's size. [ying.huang@intel.com: minor cleanup and fix] Link: http://lkml.kernel.org/r/20170515112522.32457-3-ying.huang@intel.com Signed-off-by: Minchan Kim <minchan@kernel.org> Signed-off-by: "Huang, Ying" <ying.huang@intel.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: Ebru Akagunduz <ebru.akagunduz@gmail.com> Cc: Hugh Dickins <hughd@google.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Rik van Riel <riel@redhat.com> Cc: Shaohua Li <shli@kernel.org> Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/swapfile.c')
-rw-r--r--mm/swapfile.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c
index 984f0dd94948..8a6cdf9e55f9 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -1148,7 +1148,7 @@ void swap_free(swp_entry_t entry)
1148/* 1148/*
1149 * Called after dropping swapcache to decrease refcnt to swap entries. 1149 * Called after dropping swapcache to decrease refcnt to swap entries.
1150 */ 1150 */
1151void swapcache_free(swp_entry_t entry) 1151static void swapcache_free(swp_entry_t entry)
1152{ 1152{
1153 struct swap_info_struct *p; 1153 struct swap_info_struct *p;
1154 1154
@@ -1160,7 +1160,7 @@ void swapcache_free(swp_entry_t entry)
1160} 1160}
1161 1161
1162#ifdef CONFIG_THP_SWAP 1162#ifdef CONFIG_THP_SWAP
1163void swapcache_free_cluster(swp_entry_t entry) 1163static void swapcache_free_cluster(swp_entry_t entry)
1164{ 1164{
1165 unsigned long offset = swp_offset(entry); 1165 unsigned long offset = swp_offset(entry);
1166 unsigned long idx = offset / SWAPFILE_CLUSTER; 1166 unsigned long idx = offset / SWAPFILE_CLUSTER;
@@ -1184,8 +1184,20 @@ void swapcache_free_cluster(swp_entry_t entry)
1184 swap_free_cluster(si, idx); 1184 swap_free_cluster(si, idx);
1185 spin_unlock(&si->lock); 1185 spin_unlock(&si->lock);
1186} 1186}
1187#else
1188static inline void swapcache_free_cluster(swp_entry_t entry)
1189{
1190}
1187#endif /* CONFIG_THP_SWAP */ 1191#endif /* CONFIG_THP_SWAP */
1188 1192
1193void put_swap_page(struct page *page, swp_entry_t entry)
1194{
1195 if (!PageTransHuge(page))
1196 swapcache_free(entry);
1197 else
1198 swapcache_free_cluster(entry);
1199}
1200
1189void swapcache_free_entries(swp_entry_t *entries, int n) 1201void swapcache_free_entries(swp_entry_t *entries, int n)
1190{ 1202{
1191 struct swap_info_struct *p, *prev; 1203 struct swap_info_struct *p, *prev;