diff options
| author | Ingo Molnar <[email protected]> | 2009-03-23 16:53:20 +0100 | 
|---|---|---|
| committer | Ingo Molnar <[email protected]> | 2009-03-23 16:53:20 +0100 | 
| commit | efd247fa34084d9b162f485004ae6d8a04059f0c (patch) | |
| tree | 417dcbe06d5cce1353a4c19cbda480ae67652b5c /fs/buffer.c | |
| parent | af66df5ecf9c9e2d2ff86e8203510c1c4519d64c (diff) | |
| parent | 59fcbddaff6f862cc1584b488866d9c4a5579085 (diff) | |
Merge branches 'sched/debug' and 'linus' into sched/core
Diffstat (limited to 'fs/buffer.c')
| -rw-r--r-- | fs/buffer.c | 23 | 
1 files changed, 11 insertions, 12 deletions
| diff --git a/fs/buffer.c b/fs/buffer.c index 9f697419ed8e..891e1c78e4f1 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -760,15 +760,9 @@ EXPORT_SYMBOL(mark_buffer_dirty_inode);   * If warn is true, then emit a warning if the page is not uptodate and has   * not been truncated.   */ -static int __set_page_dirty(struct page *page, +static void __set_page_dirty(struct page *page,  		struct address_space *mapping, int warn)  { -	if (unlikely(!mapping)) -		return !TestSetPageDirty(page); - -	if (TestSetPageDirty(page)) -		return 0; -  	spin_lock_irq(&mapping->tree_lock);  	if (page->mapping) {	/* Race with truncate? */  		WARN_ON_ONCE(warn && !PageUptodate(page)); @@ -785,8 +779,6 @@ static int __set_page_dirty(struct page *page,  	}  	spin_unlock_irq(&mapping->tree_lock);  	__mark_inode_dirty(mapping->host, I_DIRTY_PAGES); - -	return 1;  }  /* @@ -816,6 +808,7 @@ static int __set_page_dirty(struct page *page,   */  int __set_page_dirty_buffers(struct page *page)  { +	int newly_dirty;  	struct address_space *mapping = page_mapping(page);  	if (unlikely(!mapping)) @@ -831,9 +824,12 @@ int __set_page_dirty_buffers(struct page *page)  			bh = bh->b_this_page;  		} while (bh != head);  	} +	newly_dirty = !TestSetPageDirty(page);  	spin_unlock(&mapping->private_lock); -	return __set_page_dirty(page, mapping, 1); +	if (newly_dirty) +		__set_page_dirty(page, mapping, 1); +	return newly_dirty;  }  EXPORT_SYMBOL(__set_page_dirty_buffers); @@ -1262,8 +1258,11 @@ void mark_buffer_dirty(struct buffer_head *bh)  			return;  	} -	if (!test_set_buffer_dirty(bh)) -		__set_page_dirty(bh->b_page, page_mapping(bh->b_page), 0); +	if (!test_set_buffer_dirty(bh)) { +		struct page *page = bh->b_page; +		if (!TestSetPageDirty(page)) +			__set_page_dirty(page, page_mapping(page), 0); +	}  }  /* |