Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 43963
b: refs/heads/master
c: 8c08540
h: refs/heads/master
i:
  43961: d12d95a
  43959: eea8caa
v: v3
  • Loading branch information
Andrew Morton authored and Linus Torvalds committed Dec 10, 2006
1 parent d967891 commit 69149c5
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 59 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2
refs/heads/master: 8c08540f8755c451d8b96ea14cfe796bc3cd712d
25 changes: 12 additions & 13 deletions trunk/fs/buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -724,20 +724,19 @@ int __set_page_dirty_buffers(struct page *page)
}
spin_unlock(&mapping->private_lock);

if (!TestSetPageDirty(page)) {
write_lock_irq(&mapping->tree_lock);
if (page->mapping) { /* Race with truncate? */
if (mapping_cap_account_dirty(mapping))
__inc_zone_page_state(page, NR_FILE_DIRTY);
radix_tree_tag_set(&mapping->page_tree,
page_index(page),
PAGECACHE_TAG_DIRTY);
}
write_unlock_irq(&mapping->tree_lock);
__mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
return 1;
if (TestSetPageDirty(page))
return 0;

write_lock_irq(&mapping->tree_lock);
if (page->mapping) { /* Race with truncate? */
if (mapping_cap_account_dirty(mapping))
__inc_zone_page_state(page, NR_FILE_DIRTY);
radix_tree_tag_set(&mapping->page_tree,
page_index(page), PAGECACHE_TAG_DIRTY);
}
return 0;
write_unlock_irq(&mapping->tree_lock);
__mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
return 1;
}
EXPORT_SYMBOL(__set_page_dirty_buffers);

Expand Down
88 changes: 43 additions & 45 deletions trunk/mm/page-writeback.c
Original file line number Diff line number Diff line change
Expand Up @@ -761,23 +761,22 @@ int __set_page_dirty_nobuffers(struct page *page)
struct address_space *mapping = page_mapping(page);
struct address_space *mapping2;

if (mapping) {
write_lock_irq(&mapping->tree_lock);
mapping2 = page_mapping(page);
if (mapping2) { /* Race with truncate? */
BUG_ON(mapping2 != mapping);
if (mapping_cap_account_dirty(mapping))
__inc_zone_page_state(page,
NR_FILE_DIRTY);
radix_tree_tag_set(&mapping->page_tree,
page_index(page), PAGECACHE_TAG_DIRTY);
}
write_unlock_irq(&mapping->tree_lock);
if (mapping->host) {
/* !PageAnon && !swapper_space */
__mark_inode_dirty(mapping->host,
I_DIRTY_PAGES);
}
if (!mapping)
return 1;

write_lock_irq(&mapping->tree_lock);
mapping2 = page_mapping(page);
if (mapping2) { /* Race with truncate? */
BUG_ON(mapping2 != mapping);
if (mapping_cap_account_dirty(mapping))
__inc_zone_page_state(page, NR_FILE_DIRTY);
radix_tree_tag_set(&mapping->page_tree,
page_index(page), PAGECACHE_TAG_DIRTY);
}
write_unlock_irq(&mapping->tree_lock);
if (mapping->host) {
/* !PageAnon && !swapper_space */
__mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
}
return 1;
}
Expand Down Expand Up @@ -851,27 +850,26 @@ int test_clear_page_dirty(struct page *page)
struct address_space *mapping = page_mapping(page);
unsigned long flags;

if (mapping) {
write_lock_irqsave(&mapping->tree_lock, flags);
if (TestClearPageDirty(page)) {
radix_tree_tag_clear(&mapping->page_tree,
page_index(page),
PAGECACHE_TAG_DIRTY);
write_unlock_irqrestore(&mapping->tree_lock, flags);
/*
* We can continue to use `mapping' here because the
* page is locked, which pins the address_space
*/
if (mapping_cap_account_dirty(mapping)) {
page_mkclean(page);
dec_zone_page_state(page, NR_FILE_DIRTY);
}
return 1;
}
if (!mapping)
return TestClearPageDirty(page);

write_lock_irqsave(&mapping->tree_lock, flags);
if (TestClearPageDirty(page)) {
radix_tree_tag_clear(&mapping->page_tree,
page_index(page), PAGECACHE_TAG_DIRTY);
write_unlock_irqrestore(&mapping->tree_lock, flags);
return 0;
/*
* We can continue to use `mapping' here because the
* page is locked, which pins the address_space
*/
if (mapping_cap_account_dirty(mapping)) {
page_mkclean(page);
dec_zone_page_state(page, NR_FILE_DIRTY);
}
return 1;
}
return TestClearPageDirty(page);
write_unlock_irqrestore(&mapping->tree_lock, flags);
return 0;
}
EXPORT_SYMBOL(test_clear_page_dirty);

Expand All @@ -893,17 +891,17 @@ int clear_page_dirty_for_io(struct page *page)
{
struct address_space *mapping = page_mapping(page);

if (mapping) {
if (TestClearPageDirty(page)) {
if (mapping_cap_account_dirty(mapping)) {
page_mkclean(page);
dec_zone_page_state(page, NR_FILE_DIRTY);
}
return 1;
if (!mapping)
return TestClearPageDirty(page);

if (TestClearPageDirty(page)) {
if (mapping_cap_account_dirty(mapping)) {
page_mkclean(page);
dec_zone_page_state(page, NR_FILE_DIRTY);
}
return 0;
return 1;
}
return TestClearPageDirty(page);
return 0;
}
EXPORT_SYMBOL(clear_page_dirty_for_io);

Expand Down

0 comments on commit 69149c5

Please sign in to comment.