]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/writeback: Add folio_cancel_dirty()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 8 Mar 2021 21:43:04 +0000 (16:43 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Sun, 15 Aug 2021 15:31:40 +0000 (11:31 -0400)
Turn __cancel_dirty_page() into __folio_cancel_dirty() and add wrappers.
Move the prototypes into pagemap.h since this is page cache functionality.
Saves 44 bytes of kernel text in total; 33 bytes from __folio_cancel_dirty
and 11 from two callers of cancel_dirty_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Howells <dhowells@redhat.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
include/linux/mm.h
include/linux/pagemap.h
mm/page-writeback.c

index a554d792e82b507f08e101c60ef9ea671efcc33d..614d35b8d813bd99b5c93c04d8d3bea0b89ea4a3 100644 (file)
@@ -2008,13 +2008,6 @@ int redirty_page_for_writepage(struct writeback_control *wbc,
 bool folio_mark_dirty(struct folio *folio);
 bool set_page_dirty(struct page *page);
 int set_page_dirty_lock(struct page *page);
-void __cancel_dirty_page(struct page *page);
-static inline void cancel_dirty_page(struct page *page)
-{
-       /* Avoid atomic ops, locking, etc. when not actually needed. */
-       if (PageDirty(page))
-               __cancel_dirty_page(page);
-}
 int clear_page_dirty_for_io(struct page *page);
 
 int get_cmdline(struct task_struct *task, char *buffer, int buflen);
index 665ba6a673853d8982b9b3a25c095f77b98da258..a4d0aeaf884d8aa1672c62873b35a32d5c95e451 100644 (file)
@@ -786,6 +786,17 @@ static inline void account_page_cleaned(struct page *page,
 {
        return folio_account_cleaned(page_folio(page), mapping, wb);
 }
+void __folio_cancel_dirty(struct folio *folio);
+static inline void folio_cancel_dirty(struct folio *folio)
+{
+       /* Avoid atomic ops, locking, etc. when not actually needed. */
+       if (folio_test_dirty(folio))
+               __folio_cancel_dirty(folio);
+}
+static inline void cancel_dirty_page(struct page *page)
+{
+       folio_cancel_dirty(page_folio(page));
+}
 
 int __set_page_dirty_nobuffers(struct page *page);
 int __set_page_dirty_no_writeback(struct page *page);
index 9b91cf90a33f4e54e80676408b38c89de7efc904..b6a4868f687623fb4b4b42f9c76236ffd2942ade 100644 (file)
@@ -2640,28 +2640,28 @@ EXPORT_SYMBOL(set_page_dirty_lock);
  * page without actually doing it through the VM. Can you say "ext3 is
  * horribly ugly"? Thought you could.
  */
-void __cancel_dirty_page(struct page *page)
+void __folio_cancel_dirty(struct folio *folio)
 {
-       struct address_space *mapping = page_mapping(page);
+       struct address_space *mapping = folio_mapping(folio);
 
        if (mapping_can_writeback(mapping)) {
                struct inode *inode = mapping->host;
                struct bdi_writeback *wb;
                struct wb_lock_cookie cookie = {};
 
-               lock_page_memcg(page);
+               folio_memcg_lock(folio);
                wb = unlocked_inode_to_wb_begin(inode, &cookie);
 
-               if (TestClearPageDirty(page))
-                       account_page_cleaned(page, mapping, wb);
+               if (folio_test_clear_dirty(folio))
+                       folio_account_cleaned(folio, mapping, wb);
 
                unlocked_inode_to_wb_end(inode, &cookie);
-               unlock_page_memcg(page);
+               folio_memcg_unlock(folio);
        } else {
-               ClearPageDirty(page);
+               folio_clear_dirty(folio);
        }
 }
-EXPORT_SYMBOL(__cancel_dirty_page);
+EXPORT_SYMBOL(__folio_cancel_dirty);
 
 /*
  * Clear a page's dirty flag, while caring for dirty memory accounting.