diff options
Diffstat (limited to 'fs/buffer.c')
| -rw-r--r-- | fs/buffer.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/fs/buffer.c b/fs/buffer.c index 651dba10b9c2..27265a8b43c1 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -654,14 +654,16 @@ EXPORT_SYMBOL(mark_buffer_dirty_inode);  static void __set_page_dirty(struct page *page,  		struct address_space *mapping, int warn)  { -	spin_lock_irq(&mapping->tree_lock); +	unsigned long flags; + +	spin_lock_irqsave(&mapping->tree_lock, flags);  	if (page->mapping) {	/* Race with truncate? */  		WARN_ON_ONCE(warn && !PageUptodate(page));  		account_page_dirtied(page, mapping);  		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);  	__mark_inode_dirty(mapping->host, I_DIRTY_PAGES);  } |