Commit 4cd400fd authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton

shmem: convert shmem_delete_from_page_cache() to take a folio

Remove the assertion that the page is not Compound as this function now
handles large folios correctly.

Link: https://lkml.kernel.org/r/20220902194653.1739778-8-willy@infradead.orgSigned-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent f530ed0e
...@@ -763,23 +763,22 @@ static int shmem_add_to_page_cache(struct folio *folio, ...@@ -763,23 +763,22 @@ static int shmem_add_to_page_cache(struct folio *folio,
} }
/* /*
* Like delete_from_page_cache, but substitutes swap for page. * Like delete_from_page_cache, but substitutes swap for @folio.
*/ */
static void shmem_delete_from_page_cache(struct page *page, void *radswap) static void shmem_delete_from_page_cache(struct folio *folio, void *radswap)
{ {
struct address_space *mapping = page->mapping; struct address_space *mapping = folio->mapping;
long nr = folio_nr_pages(folio);
int error; int error;
VM_BUG_ON_PAGE(PageCompound(page), page);
xa_lock_irq(&mapping->i_pages); xa_lock_irq(&mapping->i_pages);
error = shmem_replace_entry(mapping, page->index, page, radswap); error = shmem_replace_entry(mapping, folio->index, folio, radswap);
page->mapping = NULL; folio->mapping = NULL;
mapping->nrpages--; mapping->nrpages -= nr;
__dec_lruvec_page_state(page, NR_FILE_PAGES); __lruvec_stat_mod_folio(folio, NR_FILE_PAGES, -nr);
__dec_lruvec_page_state(page, NR_SHMEM); __lruvec_stat_mod_folio(folio, NR_SHMEM, -nr);
xa_unlock_irq(&mapping->i_pages); xa_unlock_irq(&mapping->i_pages);
put_page(page); folio_put(folio);
BUG_ON(error); BUG_ON(error);
} }
...@@ -1416,7 +1415,7 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc) ...@@ -1416,7 +1415,7 @@ static int shmem_writepage(struct page *page, struct writeback_control *wbc)
spin_unlock_irq(&info->lock); spin_unlock_irq(&info->lock);
swap_shmem_alloc(swap); swap_shmem_alloc(swap);
shmem_delete_from_page_cache(&folio->page, swp_to_radix_entry(swap)); shmem_delete_from_page_cache(folio, swp_to_radix_entry(swap));
mutex_unlock(&shmem_swaplist_mutex); mutex_unlock(&shmem_swaplist_mutex);
BUG_ON(folio_mapped(folio)); BUG_ON(folio_mapped(folio));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment