mm/writeback: Add folio_redirty_for_writepage()
[sfrench/cifs-2.6.git] / mm / page-writeback.c
index 7ef904363fb7cb99b327182a0cfa472d5a4b5bd8..a0c35a9d8029c6635f0db57a60e196bb0787f438 100644 (file)
@@ -2575,21 +2575,31 @@ void folio_account_redirty(struct folio *folio)
 }
 EXPORT_SYMBOL(folio_account_redirty);
 
-/*
- * When a writepage implementation decides that it doesn't want to write this
- * page for some reason, it should redirty the locked page via
- * redirty_page_for_writepage() and it should then unlock the page and return 0
+/**
+ * folio_redirty_for_writepage - Decline to write a dirty folio.
+ * @wbc: The writeback control.
+ * @folio: The folio.
+ *
+ * When a writepage implementation decides that it doesn't want to write
+ * @folio for some reason, it should call this function, unlock @folio and
+ * return 0.
+ *
+ * Return: True if we redirtied the folio.  False if someone else dirtied
+ * it first.
  */
-int redirty_page_for_writepage(struct writeback_control *wbc, struct page *page)
+bool folio_redirty_for_writepage(struct writeback_control *wbc,
+               struct folio *folio)
 {
-       int ret;
+       bool ret;
+       long nr = folio_nr_pages(folio);
+
+       wbc->pages_skipped += nr;
+       ret = filemap_dirty_folio(folio->mapping, folio);
+       folio_account_redirty(folio);
 
-       wbc->pages_skipped++;
-       ret = __set_page_dirty_nobuffers(page);
-       account_page_redirty(page);
        return ret;
 }
-EXPORT_SYMBOL(redirty_page_for_writepage);
+EXPORT_SYMBOL(folio_redirty_for_writepage);
 
 /**
  * folio_mark_dirty - Mark a folio as being modified.