diff options
Diffstat (limited to 'mm/swapfile.c')
-rw-r--r-- | mm/swapfile.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/mm/swapfile.c b/mm/swapfile.c index 8688ae65ef58..dbac1d49469d 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c | |||
@@ -2197,7 +2197,8 @@ int try_to_unuse(unsigned int type, bool frontswap, | |||
2197 | */ | 2197 | */ |
2198 | if (PageSwapCache(page) && | 2198 | if (PageSwapCache(page) && |
2199 | likely(page_private(page) == entry.val) && | 2199 | likely(page_private(page) == entry.val) && |
2200 | !page_swapped(page)) | 2200 | (!PageTransCompound(page) || |
2201 | !swap_page_trans_huge_swapped(si, entry))) | ||
2201 | delete_from_swap_cache(compound_head(page)); | 2202 | delete_from_swap_cache(compound_head(page)); |
2202 | 2203 | ||
2203 | /* | 2204 | /* |
@@ -2812,8 +2813,9 @@ static struct swap_info_struct *alloc_swap_info(void) | |||
2812 | struct swap_info_struct *p; | 2813 | struct swap_info_struct *p; |
2813 | unsigned int type; | 2814 | unsigned int type; |
2814 | int i; | 2815 | int i; |
2816 | int size = sizeof(*p) + nr_node_ids * sizeof(struct plist_node); | ||
2815 | 2817 | ||
2816 | p = kvzalloc(sizeof(*p), GFP_KERNEL); | 2818 | p = kvzalloc(size, GFP_KERNEL); |
2817 | if (!p) | 2819 | if (!p) |
2818 | return ERR_PTR(-ENOMEM); | 2820 | return ERR_PTR(-ENOMEM); |
2819 | 2821 | ||