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

fs: remove noop_set_page_dirty()

Use __set_page_dirty_no_writeback() instead. This will set the dirty bit
on the page, which will be used to avoid calling set_page_dirty() in the
future. It will have no effect on actually writing the page back, as the
pages are not on any LRU lists.

[akpm@linux-foundation.org: export __set_page_dirty_no_writeback() to modules]

Link: https://lkml.kernel.org/r/20210615162342.1669332-6-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Christoph Hellwig <hch@lst.de>
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
b82a96c9 fc50eee3

+6 -22
+1 -1
drivers/dax/device.c
··· 337 337 } 338 338 339 339 static const struct address_space_operations dev_dax_aops = { 340 - .set_page_dirty = noop_set_page_dirty, 340 + .set_page_dirty = __set_page_dirty_no_writeback, 341 341 .invalidatepage = noop_invalidatepage, 342 342 }; 343 343
+1 -1
fs/ext2/inode.c
··· 992 992 static const struct address_space_operations ext2_dax_aops = { 993 993 .writepages = ext2_dax_writepages, 994 994 .direct_IO = noop_direct_IO, 995 - .set_page_dirty = noop_set_page_dirty, 995 + .set_page_dirty = __set_page_dirty_no_writeback, 996 996 .invalidatepage = noop_invalidatepage, 997 997 }; 998 998
+1 -1
fs/ext4/inode.c
··· 3701 3701 static const struct address_space_operations ext4_dax_aops = { 3702 3702 .writepages = ext4_dax_writepages, 3703 3703 .direct_IO = noop_direct_IO, 3704 - .set_page_dirty = noop_set_page_dirty, 3704 + .set_page_dirty = __set_page_dirty_no_writeback, 3705 3705 .bmap = ext4_bmap, 3706 3706 .invalidatepage = noop_invalidatepage, 3707 3707 .swap_activate = ext4_iomap_swap_activate,
+1 -1
fs/fuse/dax.c
··· 1329 1329 static const struct address_space_operations fuse_dax_file_aops = { 1330 1330 .writepages = fuse_dax_writepages, 1331 1331 .direct_IO = noop_direct_IO, 1332 - .set_page_dirty = noop_set_page_dirty, 1332 + .set_page_dirty = __set_page_dirty_no_writeback, 1333 1333 .invalidatepage = noop_invalidatepage, 1334 1334 }; 1335 1335
-16
fs/libfs.c
··· 1171 1171 } 1172 1172 EXPORT_SYMBOL(noop_fsync); 1173 1173 1174 - int noop_set_page_dirty(struct page *page) 1175 - { 1176 - /* 1177 - * Unlike __set_page_dirty_no_writeback that handles dirty page 1178 - * tracking in the page object, dax does all dirty tracking in 1179 - * the inode address_space in response to mkwrite faults. In the 1180 - * dax case we only need to worry about potentially dirty CPU 1181 - * caches, not dirty page cache pages to write back. 1182 - * 1183 - * This callback is defined to prevent fallback to 1184 - * __set_page_dirty_buffers() in set_page_dirty(). 1185 - */ 1186 - return 0; 1187 - } 1188 - EXPORT_SYMBOL_GPL(noop_set_page_dirty); 1189 - 1190 1174 void noop_invalidatepage(struct page *page, unsigned int offset, 1191 1175 unsigned int length) 1192 1176 {
+1 -1
fs/xfs/xfs_aops.c
··· 575 575 const struct address_space_operations xfs_dax_aops = { 576 576 .writepages = xfs_dax_writepages, 577 577 .direct_IO = noop_direct_IO, 578 - .set_page_dirty = noop_set_page_dirty, 578 + .set_page_dirty = __set_page_dirty_no_writeback, 579 579 .invalidatepage = noop_invalidatepage, 580 580 .swap_activate = xfs_iomap_swapfile_activate, 581 581 };
-1
include/linux/fs.h
··· 3417 3417 extern void simple_recursive_removal(struct dentry *, 3418 3418 void (*callback)(struct dentry *)); 3419 3419 extern int noop_fsync(struct file *, loff_t, loff_t, int); 3420 - extern int noop_set_page_dirty(struct page *page); 3421 3420 extern void noop_invalidatepage(struct page *page, unsigned int offset, 3422 3421 unsigned int length); 3423 3422 extern ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter);
+1
mm/page-writeback.c
··· 2417 2417 return !TestSetPageDirty(page); 2418 2418 return 0; 2419 2419 } 2420 + EXPORT_SYMBOL(__set_page_dirty_no_writeback); 2420 2421 2421 2422 /* 2422 2423 * Helper function for set_page_dirty family.