diff options
Diffstat (limited to 'fs/btrfs/extent_io.c')
| -rw-r--r-- | fs/btrfs/extent_io.c | 33 | 
1 files changed, 33 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index f173c5af646..cdee391fc7b 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -1257,6 +1257,39 @@ int unlock_extent(struct extent_io_tree *tree, u64 start, u64 end)  				GFP_NOFS);  } +int extent_range_clear_dirty_for_io(struct inode *inode, u64 start, u64 end) +{ +	unsigned long index = start >> PAGE_CACHE_SHIFT; +	unsigned long end_index = end >> PAGE_CACHE_SHIFT; +	struct page *page; + +	while (index <= end_index) { +		page = find_get_page(inode->i_mapping, index); +		BUG_ON(!page); /* Pages should be in the extent_io_tree */ +		clear_page_dirty_for_io(page); +		page_cache_release(page); +		index++; +	} +	return 0; +} + +int extent_range_redirty_for_io(struct inode *inode, u64 start, u64 end) +{ +	unsigned long index = start >> PAGE_CACHE_SHIFT; +	unsigned long end_index = end >> PAGE_CACHE_SHIFT; +	struct page *page; + +	while (index <= end_index) { +		page = find_get_page(inode->i_mapping, index); +		BUG_ON(!page); /* Pages should be in the extent_io_tree */ +		account_page_redirty(page); +		__set_page_dirty_nobuffers(page); +		page_cache_release(page); +		index++; +	} +	return 0; +} +  /*   * helper function to set both pages and extents in the tree writeback   */  |