|
@@ -2502,13 +2502,13 @@ void account_page_redirty(struct page *page)
|
|
if (mapping && mapping_cap_account_dirty(mapping)) {
|
|
if (mapping && mapping_cap_account_dirty(mapping)) {
|
|
struct inode *inode = mapping->host;
|
|
struct inode *inode = mapping->host;
|
|
struct bdi_writeback *wb;
|
|
struct bdi_writeback *wb;
|
|
- bool locked;
|
|
|
|
|
|
+ struct wb_lock_cookie cookie = {};
|
|
|
|
|
|
- wb = unlocked_inode_to_wb_begin(inode, &locked);
|
|
|
|
|
|
+ wb = unlocked_inode_to_wb_begin(inode, &cookie);
|
|
current->nr_dirtied--;
|
|
current->nr_dirtied--;
|
|
dec_node_page_state(page, NR_DIRTIED);
|
|
dec_node_page_state(page, NR_DIRTIED);
|
|
dec_wb_stat(wb, WB_DIRTIED);
|
|
dec_wb_stat(wb, WB_DIRTIED);
|
|
- unlocked_inode_to_wb_end(inode, locked);
|
|
|
|
|
|
+ unlocked_inode_to_wb_end(inode, &cookie);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(account_page_redirty);
|
|
EXPORT_SYMBOL(account_page_redirty);
|
|
@@ -2614,15 +2614,15 @@ void __cancel_dirty_page(struct page *page)
|
|
if (mapping_cap_account_dirty(mapping)) {
|
|
if (mapping_cap_account_dirty(mapping)) {
|
|
struct inode *inode = mapping->host;
|
|
struct inode *inode = mapping->host;
|
|
struct bdi_writeback *wb;
|
|
struct bdi_writeback *wb;
|
|
- bool locked;
|
|
|
|
|
|
+ struct wb_lock_cookie cookie = {};
|
|
|
|
|
|
lock_page_memcg(page);
|
|
lock_page_memcg(page);
|
|
- wb = unlocked_inode_to_wb_begin(inode, &locked);
|
|
|
|
|
|
+ wb = unlocked_inode_to_wb_begin(inode, &cookie);
|
|
|
|
|
|
if (TestClearPageDirty(page))
|
|
if (TestClearPageDirty(page))
|
|
account_page_cleaned(page, mapping, wb);
|
|
account_page_cleaned(page, mapping, wb);
|
|
|
|
|
|
- unlocked_inode_to_wb_end(inode, locked);
|
|
|
|
|
|
+ unlocked_inode_to_wb_end(inode, &cookie);
|
|
unlock_page_memcg(page);
|
|
unlock_page_memcg(page);
|
|
} else {
|
|
} else {
|
|
ClearPageDirty(page);
|
|
ClearPageDirty(page);
|
|
@@ -2654,7 +2654,7 @@ int clear_page_dirty_for_io(struct page *page)
|
|
if (mapping && mapping_cap_account_dirty(mapping)) {
|
|
if (mapping && mapping_cap_account_dirty(mapping)) {
|
|
struct inode *inode = mapping->host;
|
|
struct inode *inode = mapping->host;
|
|
struct bdi_writeback *wb;
|
|
struct bdi_writeback *wb;
|
|
- bool locked;
|
|
|
|
|
|
+ struct wb_lock_cookie cookie = {};
|
|
|
|
|
|
/*
|
|
/*
|
|
* Yes, Virginia, this is indeed insane.
|
|
* Yes, Virginia, this is indeed insane.
|
|
@@ -2691,14 +2691,14 @@ int clear_page_dirty_for_io(struct page *page)
|
|
* always locked coming in here, so we get the desired
|
|
* always locked coming in here, so we get the desired
|
|
* exclusion.
|
|
* exclusion.
|
|
*/
|
|
*/
|
|
- wb = unlocked_inode_to_wb_begin(inode, &locked);
|
|
|
|
|
|
+ wb = unlocked_inode_to_wb_begin(inode, &cookie);
|
|
if (TestClearPageDirty(page)) {
|
|
if (TestClearPageDirty(page)) {
|
|
dec_lruvec_page_state(page, NR_FILE_DIRTY);
|
|
dec_lruvec_page_state(page, NR_FILE_DIRTY);
|
|
dec_zone_page_state(page, NR_ZONE_WRITE_PENDING);
|
|
dec_zone_page_state(page, NR_ZONE_WRITE_PENDING);
|
|
dec_wb_stat(wb, WB_RECLAIMABLE);
|
|
dec_wb_stat(wb, WB_RECLAIMABLE);
|
|
ret = 1;
|
|
ret = 1;
|
|
}
|
|
}
|
|
- unlocked_inode_to_wb_end(inode, locked);
|
|
|
|
|
|
+ unlocked_inode_to_wb_end(inode, &cookie);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
return TestClearPageDirty(page);
|
|
return TestClearPageDirty(page);
|