Loading include/linux/swap.h +3 −2 Original line number Original line Diff line number Diff line Loading @@ -403,7 +403,7 @@ extern void show_swap_cache_info(void); extern int add_to_swap(struct page *page); extern int add_to_swap(struct page *page); extern int add_to_swap_cache(struct page *, swp_entry_t, gfp_t); extern int add_to_swap_cache(struct page *, swp_entry_t, gfp_t); extern int __add_to_swap_cache(struct page *page, swp_entry_t entry); extern int __add_to_swap_cache(struct page *page, swp_entry_t entry); extern void __delete_from_swap_cache(struct page *); extern void __delete_from_swap_cache(struct page *, swp_entry_t entry); extern void delete_from_swap_cache(struct page *); extern void delete_from_swap_cache(struct page *); extern void free_page_and_swap_cache(struct page *); extern void free_page_and_swap_cache(struct page *); extern void free_pages_and_swap_cache(struct page **, int); extern void free_pages_and_swap_cache(struct page **, int); Loading Loading @@ -557,7 +557,8 @@ static inline int add_to_swap_cache(struct page *page, swp_entry_t entry, return -1; return -1; } } static inline void __delete_from_swap_cache(struct page *page) static inline void __delete_from_swap_cache(struct page *page, swp_entry_t entry) { { } } Loading mm/swap_state.c +10 −14 Original line number Original line Diff line number Diff line Loading @@ -154,23 +154,22 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp) * This must be called only on pages that have * This must be called only on pages that have * been verified to be in the swap cache. * been verified to be in the swap cache. */ */ void __delete_from_swap_cache(struct page *page) void __delete_from_swap_cache(struct page *page, swp_entry_t entry) { { struct address_space *address_space; struct address_space *address_space = swap_address_space(entry); int i, nr = hpage_nr_pages(page); int i, nr = hpage_nr_pages(page); swp_entry_t entry; pgoff_t idx = swp_offset(entry); pgoff_t idx; XA_STATE(xas, &address_space->i_pages, idx); VM_BUG_ON_PAGE(!PageLocked(page), page); VM_BUG_ON_PAGE(!PageLocked(page), page); VM_BUG_ON_PAGE(!PageSwapCache(page), page); VM_BUG_ON_PAGE(!PageSwapCache(page), page); VM_BUG_ON_PAGE(PageWriteback(page), page); VM_BUG_ON_PAGE(PageWriteback(page), page); entry.val = page_private(page); address_space = swap_address_space(entry); idx = swp_offset(entry); for (i = 0; i < nr; i++) { for (i = 0; i < nr; i++) { radix_tree_delete(&address_space->i_pages, idx + i); void *entry = xas_store(&xas, NULL); VM_BUG_ON_PAGE(entry != page + i, entry); set_page_private(page + i, 0); set_page_private(page + i, 0); xas_next(&xas); } } ClearPageSwapCache(page); ClearPageSwapCache(page); address_space->nrpages -= nr; address_space->nrpages -= nr; Loading Loading @@ -243,14 +242,11 @@ int add_to_swap(struct page *page) */ */ void delete_from_swap_cache(struct page *page) void delete_from_swap_cache(struct page *page) { { swp_entry_t entry; swp_entry_t entry = { .val = page_private(page) }; struct address_space *address_space; struct address_space *address_space = swap_address_space(entry); entry.val = page_private(page); address_space = swap_address_space(entry); xa_lock_irq(&address_space->i_pages); xa_lock_irq(&address_space->i_pages); __delete_from_swap_cache(page); __delete_from_swap_cache(page, entry); xa_unlock_irq(&address_space->i_pages); xa_unlock_irq(&address_space->i_pages); put_swap_page(page, entry); put_swap_page(page, entry); Loading mm/vmscan.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -923,7 +923,7 @@ static int __remove_mapping(struct address_space *mapping, struct page *page, if (PageSwapCache(page)) { if (PageSwapCache(page)) { swp_entry_t swap = { .val = page_private(page) }; swp_entry_t swap = { .val = page_private(page) }; mem_cgroup_swapout(page, swap); mem_cgroup_swapout(page, swap); __delete_from_swap_cache(page); __delete_from_swap_cache(page, swap); xa_unlock_irqrestore(&mapping->i_pages, flags); xa_unlock_irqrestore(&mapping->i_pages, flags); put_swap_page(page, swap); put_swap_page(page, swap); } else { } else { Loading Loading
include/linux/swap.h +3 −2 Original line number Original line Diff line number Diff line Loading @@ -403,7 +403,7 @@ extern void show_swap_cache_info(void); extern int add_to_swap(struct page *page); extern int add_to_swap(struct page *page); extern int add_to_swap_cache(struct page *, swp_entry_t, gfp_t); extern int add_to_swap_cache(struct page *, swp_entry_t, gfp_t); extern int __add_to_swap_cache(struct page *page, swp_entry_t entry); extern int __add_to_swap_cache(struct page *page, swp_entry_t entry); extern void __delete_from_swap_cache(struct page *); extern void __delete_from_swap_cache(struct page *, swp_entry_t entry); extern void delete_from_swap_cache(struct page *); extern void delete_from_swap_cache(struct page *); extern void free_page_and_swap_cache(struct page *); extern void free_page_and_swap_cache(struct page *); extern void free_pages_and_swap_cache(struct page **, int); extern void free_pages_and_swap_cache(struct page **, int); Loading Loading @@ -557,7 +557,8 @@ static inline int add_to_swap_cache(struct page *page, swp_entry_t entry, return -1; return -1; } } static inline void __delete_from_swap_cache(struct page *page) static inline void __delete_from_swap_cache(struct page *page, swp_entry_t entry) { { } } Loading
mm/swap_state.c +10 −14 Original line number Original line Diff line number Diff line Loading @@ -154,23 +154,22 @@ int add_to_swap_cache(struct page *page, swp_entry_t entry, gfp_t gfp) * This must be called only on pages that have * This must be called only on pages that have * been verified to be in the swap cache. * been verified to be in the swap cache. */ */ void __delete_from_swap_cache(struct page *page) void __delete_from_swap_cache(struct page *page, swp_entry_t entry) { { struct address_space *address_space; struct address_space *address_space = swap_address_space(entry); int i, nr = hpage_nr_pages(page); int i, nr = hpage_nr_pages(page); swp_entry_t entry; pgoff_t idx = swp_offset(entry); pgoff_t idx; XA_STATE(xas, &address_space->i_pages, idx); VM_BUG_ON_PAGE(!PageLocked(page), page); VM_BUG_ON_PAGE(!PageLocked(page), page); VM_BUG_ON_PAGE(!PageSwapCache(page), page); VM_BUG_ON_PAGE(!PageSwapCache(page), page); VM_BUG_ON_PAGE(PageWriteback(page), page); VM_BUG_ON_PAGE(PageWriteback(page), page); entry.val = page_private(page); address_space = swap_address_space(entry); idx = swp_offset(entry); for (i = 0; i < nr; i++) { for (i = 0; i < nr; i++) { radix_tree_delete(&address_space->i_pages, idx + i); void *entry = xas_store(&xas, NULL); VM_BUG_ON_PAGE(entry != page + i, entry); set_page_private(page + i, 0); set_page_private(page + i, 0); xas_next(&xas); } } ClearPageSwapCache(page); ClearPageSwapCache(page); address_space->nrpages -= nr; address_space->nrpages -= nr; Loading Loading @@ -243,14 +242,11 @@ int add_to_swap(struct page *page) */ */ void delete_from_swap_cache(struct page *page) void delete_from_swap_cache(struct page *page) { { swp_entry_t entry; swp_entry_t entry = { .val = page_private(page) }; struct address_space *address_space; struct address_space *address_space = swap_address_space(entry); entry.val = page_private(page); address_space = swap_address_space(entry); xa_lock_irq(&address_space->i_pages); xa_lock_irq(&address_space->i_pages); __delete_from_swap_cache(page); __delete_from_swap_cache(page, entry); xa_unlock_irq(&address_space->i_pages); xa_unlock_irq(&address_space->i_pages); put_swap_page(page, entry); put_swap_page(page, entry); Loading
mm/vmscan.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -923,7 +923,7 @@ static int __remove_mapping(struct address_space *mapping, struct page *page, if (PageSwapCache(page)) { if (PageSwapCache(page)) { swp_entry_t swap = { .val = page_private(page) }; swp_entry_t swap = { .val = page_private(page) }; mem_cgroup_swapout(page, swap); mem_cgroup_swapout(page, swap); __delete_from_swap_cache(page); __delete_from_swap_cache(page, swap); xa_unlock_irqrestore(&mapping->i_pages, flags); xa_unlock_irqrestore(&mapping->i_pages, flags); put_swap_page(page, swap); put_swap_page(page, swap); } else { } else { Loading