aboutsummaryrefslogtreecommitdiffstats
path: root/mm/swap_state.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/swap_state.c')
-rw-r--r--mm/swap_state.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/mm/swap_state.c b/mm/swap_state.c
index 16ff89d058f4..0ad214d7a7ad 100644
--- a/mm/swap_state.c
+++ b/mm/swap_state.c
@@ -231,10 +231,7 @@ retry:
231 return 1; 231 return 1;
232 232
233fail_free: 233fail_free:
234 if (PageTransHuge(page)) 234 put_swap_page(page, entry);
235 swapcache_free_cluster(entry);
236 else
237 swapcache_free(entry);
238fail: 235fail:
239 if (PageTransHuge(page) && !split_huge_page_to_list(page, list)) 236 if (PageTransHuge(page) && !split_huge_page_to_list(page, list))
240 goto retry; 237 goto retry;
@@ -259,11 +256,7 @@ void delete_from_swap_cache(struct page *page)
259 __delete_from_swap_cache(page); 256 __delete_from_swap_cache(page);
260 spin_unlock_irq(&address_space->tree_lock); 257 spin_unlock_irq(&address_space->tree_lock);
261 258
262 if (PageTransHuge(page)) 259 put_swap_page(page, entry);
263 swapcache_free_cluster(entry);
264 else
265 swapcache_free(entry);
266
267 page_ref_sub(page, hpage_nr_pages(page)); 260 page_ref_sub(page, hpage_nr_pages(page));
268} 261}
269 262
@@ -415,7 +408,7 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
415 * add_to_swap_cache() doesn't return -EEXIST, so we can safely 408 * add_to_swap_cache() doesn't return -EEXIST, so we can safely
416 * clear SWAP_HAS_CACHE flag. 409 * clear SWAP_HAS_CACHE flag.
417 */ 410 */
418 swapcache_free(entry); 411 put_swap_page(new_page, entry);
419 } while (err != -ENOMEM); 412 } while (err != -ENOMEM);
420 413
421 if (new_page) 414 if (new_page)