From: Matthew Brost <[email protected]> Use folio_split_unref helper to split a folio into individual upon final put of a fsdax page.
Cc: Dan Williams <[email protected]> Cc: Matthew Wilcox <[email protected]> Cc: Jan Kara <[email protected]> Cc: Alexander Viro <[email protected]> Cc: Christian Brauner <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Suggested-by: Alistair Popple <[email protected]> Signed-off-by: Matthew Brost <[email protected]> Signed-off-by: Francois Dugast <[email protected]> --- fs/dax.c | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 289e6254aa30..90ec68785f40 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -381,7 +381,6 @@ static void dax_folio_make_shared(struct folio *folio) static inline unsigned long dax_folio_put(struct folio *folio) { unsigned long ref; - int order, i; if (!dax_folio_is_shared(folio)) ref = 0; @@ -391,29 +390,7 @@ static inline unsigned long dax_folio_put(struct folio *folio) if (ref) return ref; - folio->mapping = NULL; - order = folio_order(folio); - if (!order) - return 0; - folio_reset_order(folio); - - for (i = 0; i < (1UL << order); i++) { - struct dev_pagemap *pgmap = page_pgmap(&folio->page); - struct page *page = folio_page(folio, i); - struct folio *new_folio = (struct folio *)page; - - ClearPageHead(page); - clear_compound_head(page); - - new_folio->mapping = NULL; - /* - * Reset pgmap which was over-written by - * prep_compound_page(). - */ - new_folio->pgmap = pgmap; - new_folio->share = 0; - WARN_ON_ONCE(folio_ref_count(new_folio)); - } + folio_split_unref(folio); return ref; } -- 2.43.0
