diff options
Diffstat (limited to 'mm/page-writeback.c')
| -rw-r--r-- | mm/page-writeback.c | 5 | 
1 files changed, 3 insertions, 2 deletions
| diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 2d30e2cfe804..7106cb1aca8e 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -2173,11 +2173,12 @@ int __set_page_dirty_nobuffers(struct page *page)  	if (!TestSetPageDirty(page)) {  		struct address_space *mapping = page_mapping(page);  		struct address_space *mapping2; +		unsigned long flags;  		if (!mapping)  			return 1; -		spin_lock_irq(&mapping->tree_lock); +		spin_lock_irqsave(&mapping->tree_lock, flags);  		mapping2 = page_mapping(page);  		if (mapping2) { /* Race with truncate? */  			BUG_ON(mapping2 != mapping); @@ -2186,7 +2187,7 @@ int __set_page_dirty_nobuffers(struct page *page)  			radix_tree_tag_set(&mapping->page_tree,  				page_index(page), PAGECACHE_TAG_DIRTY);  		} -		spin_unlock_irq(&mapping->tree_lock); +		spin_unlock_irqrestore(&mapping->tree_lock, flags);  		if (mapping->host) {  			/* !PageAnon && !swapper_space */  			__mark_inode_dirty(mapping->host, I_DIRTY_PAGES); |