|
@@ -979,14 +979,18 @@ int test_clear_page_writeback(struct page *page)
|
|
|
int ret;
|
|
|
|
|
|
if (mapping) {
|
|
|
+ struct backing_dev_info *bdi = mapping->backing_dev_info;
|
|
|
unsigned long flags;
|
|
|
|
|
|
write_lock_irqsave(&mapping->tree_lock, flags);
|
|
|
ret = TestClearPageWriteback(page);
|
|
|
- if (ret)
|
|
|
+ if (ret) {
|
|
|
radix_tree_tag_clear(&mapping->page_tree,
|
|
|
page_index(page),
|
|
|
PAGECACHE_TAG_WRITEBACK);
|
|
|
+ if (bdi_cap_writeback_dirty(bdi))
|
|
|
+ __dec_bdi_stat(bdi, BDI_WRITEBACK);
|
|
|
+ }
|
|
|
write_unlock_irqrestore(&mapping->tree_lock, flags);
|
|
|
} else {
|
|
|
ret = TestClearPageWriteback(page);
|
|
@@ -1002,14 +1006,18 @@ int test_set_page_writeback(struct page *page)
|
|
|
int ret;
|
|
|
|
|
|
if (mapping) {
|
|
|
+ struct backing_dev_info *bdi = mapping->backing_dev_info;
|
|
|
unsigned long flags;
|
|
|
|
|
|
write_lock_irqsave(&mapping->tree_lock, flags);
|
|
|
ret = TestSetPageWriteback(page);
|
|
|
- if (!ret)
|
|
|
+ if (!ret) {
|
|
|
radix_tree_tag_set(&mapping->page_tree,
|
|
|
page_index(page),
|
|
|
PAGECACHE_TAG_WRITEBACK);
|
|
|
+ if (bdi_cap_writeback_dirty(bdi))
|
|
|
+ __inc_bdi_stat(bdi, BDI_WRITEBACK);
|
|
|
+ }
|
|
|
if (!PageDirty(page))
|
|
|
radix_tree_tag_clear(&mapping->page_tree,
|
|
|
page_index(page),
|