forked from Minki/linux
mm/writeback: Add folio_cancel_dirty()
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>
This commit is contained in:
parent
fc9b6a538b
commit
fdaf532a23
@ -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);
|
||||
|
@ -785,6 +785,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);
|
||||
|
@ -2657,28 +2657,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.
|
||||
|
Loading…
Reference in New Issue
Block a user