Skip to content

Commit 78f4266

Browse files
author
Matthew Wilcox (Oracle)
committed
truncate: Add invalidate_complete_folio2()
Convert invalidate_complete_page2() to invalidate_complete_folio2(). Use filemap_free_folio() to free the page instead of calling ->freepage manually. Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: William Kucharski <[email protected]>
1 parent fae9bc4 commit 78f4266

File tree

3 files changed

+12
-15
lines changed

3 files changed

+12
-15
lines changed

mm/filemap.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,7 @@ void __filemap_remove_folio(struct folio *folio, void *shadow)
229229
page_cache_delete(mapping, folio, shadow);
230230
}
231231

232-
static void filemap_free_folio(struct address_space *mapping,
233-
struct folio *folio)
232+
void filemap_free_folio(struct address_space *mapping, struct folio *folio)
234233
{
235234
void (*freepage)(struct page *);
236235

mm/internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ static inline void force_page_cache_readahead(struct address_space *mapping,
9292

9393
unsigned find_lock_entries(struct address_space *mapping, pgoff_t start,
9494
pgoff_t end, struct pagevec *pvec, pgoff_t *indices);
95+
void filemap_free_folio(struct address_space *mapping, struct folio *folio);
9596
int truncate_inode_folio(struct address_space *mapping, struct folio *folio);
9697

9798
/**

mm/truncate.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -571,31 +571,29 @@ void invalidate_mapping_pagevec(struct address_space *mapping,
571571
* shrink_page_list() has a temp ref on them, or because they're transiently
572572
* sitting in the lru_cache_add() pagevecs.
573573
*/
574-
static int
575-
invalidate_complete_page2(struct address_space *mapping, struct page *page)
574+
static int invalidate_complete_folio2(struct address_space *mapping,
575+
struct folio *folio)
576576
{
577-
if (page->mapping != mapping)
577+
if (folio->mapping != mapping)
578578
return 0;
579579

580-
if (page_has_private(page) && !try_to_release_page(page, GFP_KERNEL))
580+
if (folio_has_private(folio) &&
581+
!filemap_release_folio(folio, GFP_KERNEL))
581582
return 0;
582583

583584
spin_lock(&mapping->host->i_lock);
584585
xa_lock_irq(&mapping->i_pages);
585-
if (PageDirty(page))
586+
if (folio_test_dirty(folio))
586587
goto failed;
587588

588-
BUG_ON(page_has_private(page));
589-
__delete_from_page_cache(page, NULL);
589+
BUG_ON(folio_has_private(folio));
590+
__filemap_remove_folio(folio, NULL);
590591
xa_unlock_irq(&mapping->i_pages);
591592
if (mapping_shrinkable(mapping))
592593
inode_add_lru(mapping->host);
593594
spin_unlock(&mapping->host->i_lock);
594595

595-
if (mapping->a_ops->freepage)
596-
mapping->a_ops->freepage(page);
597-
598-
put_page(page); /* pagecache ref */
596+
filemap_free_folio(mapping, folio);
599597
return 1;
600598
failed:
601599
xa_unlock_irq(&mapping->i_pages);
@@ -679,8 +677,7 @@ int invalidate_inode_pages2_range(struct address_space *mapping,
679677

680678
ret2 = do_launder_page(mapping, &folio->page);
681679
if (ret2 == 0) {
682-
if (!invalidate_complete_page2(mapping,
683-
&folio->page))
680+
if (!invalidate_complete_folio2(mapping, folio))
684681
ret2 = -EBUSY;
685682
}
686683
if (ret2 < 0)

0 commit comments

Comments
 (0)