Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iomap: use __set_page_dirty_nobuffers

The only difference between iomap_set_page_dirty() and
__set_page_dirty_nobuffers() is that the latter includes a debugging check
that a !Uptodate page has private data.

Link: https://lkml.kernel.org/r/20210615162342.1669332-4-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jan Kara <jack@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Matthew Wilcox (Oracle) and committed by
Linus Torvalds
fd7353f8 2f18be36

+4 -30
+1 -1
fs/gfs2/aops.c
··· 784 784 .writepages = gfs2_writepages, 785 785 .readpage = gfs2_readpage, 786 786 .readahead = gfs2_readahead, 787 - .set_page_dirty = iomap_set_page_dirty, 787 + .set_page_dirty = __set_page_dirty_nobuffers, 788 788 .releasepage = iomap_releasepage, 789 789 .invalidatepage = iomap_invalidatepage, 790 790 .bmap = gfs2_bmap,
+1 -26
fs/iomap/buffered-io.c
··· 640 640 return status; 641 641 } 642 642 643 - int 644 - iomap_set_page_dirty(struct page *page) 645 - { 646 - struct address_space *mapping = page_mapping(page); 647 - int newly_dirty; 648 - 649 - if (unlikely(!mapping)) 650 - return !TestSetPageDirty(page); 651 - 652 - /* 653 - * Lock out page's memcg migration to keep PageDirty 654 - * synchronized with per-memcg dirty page counters. 655 - */ 656 - lock_page_memcg(page); 657 - newly_dirty = !TestSetPageDirty(page); 658 - if (newly_dirty) 659 - __set_page_dirty(page, mapping, 0); 660 - unlock_page_memcg(page); 661 - 662 - if (newly_dirty) 663 - __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); 664 - return newly_dirty; 665 - } 666 - EXPORT_SYMBOL_GPL(iomap_set_page_dirty); 667 - 668 643 static size_t __iomap_write_end(struct inode *inode, loff_t pos, size_t len, 669 644 size_t copied, struct page *page) 670 645 { ··· 659 684 if (unlikely(copied < len && !PageUptodate(page))) 660 685 return 0; 661 686 iomap_set_range_uptodate(page, offset_in_page(pos), len); 662 - iomap_set_page_dirty(page); 687 + __set_page_dirty_nobuffers(page); 663 688 return copied; 664 689 } 665 690
+1 -1
fs/xfs/xfs_aops.c
··· 561 561 .readahead = xfs_vm_readahead, 562 562 .writepage = xfs_vm_writepage, 563 563 .writepages = xfs_vm_writepages, 564 - .set_page_dirty = iomap_set_page_dirty, 564 + .set_page_dirty = __set_page_dirty_nobuffers, 565 565 .releasepage = iomap_releasepage, 566 566 .invalidatepage = iomap_invalidatepage, 567 567 .bmap = xfs_vm_bmap,
+1 -1
fs/zonefs/super.c
··· 185 185 .readahead = zonefs_readahead, 186 186 .writepage = zonefs_writepage, 187 187 .writepages = zonefs_writepages, 188 - .set_page_dirty = iomap_set_page_dirty, 188 + .set_page_dirty = __set_page_dirty_nobuffers, 189 189 .releasepage = iomap_releasepage, 190 190 .invalidatepage = iomap_invalidatepage, 191 191 .migratepage = iomap_migrate_page,
-1
include/linux/iomap.h
··· 159 159 const struct iomap_ops *ops); 160 160 int iomap_readpage(struct page *page, const struct iomap_ops *ops); 161 161 void iomap_readahead(struct readahead_control *, const struct iomap_ops *ops); 162 - int iomap_set_page_dirty(struct page *page); 163 162 int iomap_is_partially_uptodate(struct page *page, unsigned long from, 164 163 unsigned long count); 165 164 int iomap_releasepage(struct page *page, gfp_t gfp_mask);