diff options
Diffstat (limited to 'fs/btrfs/ordered-data.c')
| -rw-r--r-- | fs/btrfs/ordered-data.c | 93 | 
1 files changed, 4 insertions, 89 deletions
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c index b5d6d24726b..897fba835f8 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c @@ -458,7 +458,7 @@ void btrfs_start_ordered_extent(struct inode *inode,  	 * start IO on any dirty ones so the wait doesn't stall waiting  	 * for pdflush to find them  	 */ -	btrfs_fdatawrite_range(inode->i_mapping, start, end, WB_SYNC_ALL); +	filemap_fdatawrite_range(inode->i_mapping, start, end);  	if (wait) {  		wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE,  						 &entry->flags)); @@ -488,17 +488,15 @@ again:  	/* start IO across the range first to instantiate any delalloc  	 * extents  	 */ -	btrfs_fdatawrite_range(inode->i_mapping, start, orig_end, WB_SYNC_ALL); +	filemap_fdatawrite_range(inode->i_mapping, start, orig_end);  	/* The compression code will leave pages locked but return from  	 * writepage without setting the page writeback.  Starting again  	 * with WB_SYNC_ALL will end up waiting for the IO to actually start.  	 */ -	btrfs_fdatawrite_range(inode->i_mapping, start, orig_end, WB_SYNC_ALL); +	filemap_fdatawrite_range(inode->i_mapping, start, orig_end); -	btrfs_wait_on_page_writeback_range(inode->i_mapping, -					   start >> PAGE_CACHE_SHIFT, -					   orig_end >> PAGE_CACHE_SHIFT); +	filemap_fdatawait_range(inode->i_mapping, start, orig_end);  	end = orig_end;  	found = 0; @@ -716,89 +714,6 @@ out:  } -/** - * taken from mm/filemap.c because it isn't exported - * - * __filemap_fdatawrite_range - start writeback on mapping dirty pages in range - * @mapping:	address space structure to write - * @start:	offset in bytes where the range starts - * @end:	offset in bytes where the range ends (inclusive) - * @sync_mode:	enable synchronous operation - * - * Start writeback against all of a mapping's dirty pages that lie - * within the byte offsets <start, end> inclusive. - * - * If sync_mode is WB_SYNC_ALL then this is a "data integrity" operation, as - * opposed to a regular memory cleansing writeback.  The difference between - * these two operations is that if a dirty page/buffer is encountered, it must - * be waited upon, and not just skipped over. - */ -int btrfs_fdatawrite_range(struct address_space *mapping, loff_t start, -			   loff_t end, int sync_mode) -{ -	struct writeback_control wbc = { -		.sync_mode = sync_mode, -		.nr_to_write = mapping->nrpages * 2, -		.range_start = start, -		.range_end = end, -	}; -	return btrfs_writepages(mapping, &wbc); -} - -/** - * taken from mm/filemap.c because it isn't exported - * - * wait_on_page_writeback_range - wait for writeback to complete - * @mapping:	target address_space - * @start:	beginning page index - * @end:	ending page index - * - * Wait for writeback to complete against pages indexed by start->end - * inclusive - */ -int btrfs_wait_on_page_writeback_range(struct address_space *mapping, -				       pgoff_t start, pgoff_t end) -{ -	struct pagevec pvec; -	int nr_pages; -	int ret = 0; -	pgoff_t index; - -	if (end < start) -		return 0; - -	pagevec_init(&pvec, 0); -	index = start; -	while ((index <= end) && -			(nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, -			PAGECACHE_TAG_WRITEBACK, -			min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1)) != 0) { -		unsigned i; - -		for (i = 0; i < nr_pages; i++) { -			struct page *page = pvec.pages[i]; - -			/* until radix tree lookup accepts end_index */ -			if (page->index > end) -				continue; - -			wait_on_page_writeback(page); -			if (PageError(page)) -				ret = -EIO; -		} -		pagevec_release(&pvec); -		cond_resched(); -	} - -	/* Check for outstanding write errors */ -	if (test_and_clear_bit(AS_ENOSPC, &mapping->flags)) -		ret = -ENOSPC; -	if (test_and_clear_bit(AS_EIO, &mapping->flags)) -		ret = -EIO; - -	return ret; -} -  /*   * add a given inode to the list of inodes that must be fully on   * disk before a transaction commit finishes.  |